home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / FILER.ZIP / FILER3.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1985-11-18  |  9.5 KB  |  287 lines

  1. {================================================================}
  2. {                   GET DATA RECORD PROCEDURE                    }
  3. {================================================================}
  4. PROCEDURE GETDATAREC;
  5.   BEGIN
  6.     CALCULATE;
  7.     IF DISKRECORD <> DISKRECNOWINMEM THEN
  8.       BEGIN
  9.         IF FILERECCHGD = TRUE THEN
  10.           BEGIN
  11.             IF DISKRECNOWINMEM > NBRDISKRECUSED THEN
  12.               BEGIN                 { GET NEXT AVAILABLE RECORD }
  13.                 SEEK(SOURCE,NBRDISKRECUSED+2);
  14.                 NBRDISKRECUSED := DISKRECNOWINMEM;
  15.               END
  16.             ELSE
  17.               BEGIN
  18.                 SEEK(SOURCE,DISKRECNOWINMEM);
  19.               END;
  20.             BLOCKWRITE(SOURCE,GETDATA,2);  {SAVE CHANGED DATA}
  21.             FILERECCHGD := FALSE;
  22.             CHANGEDATE := TRUE;
  23.           END;
  24.  
  25.         IF DISKRECORD <= NBRDISKRECUSED THEN
  26.           BEGIN
  27.             SEEK(SOURCE,DISKRECORD);
  28.             BLOCKREAD(SOURCE,GETDATA,2);         {  RECORD DATA  }
  29.          END
  30.         ELSE FILLCHAR(GETDATA[1],256,' '); {SPACES FOR EMPTY REC }
  31.  
  32.        DISKRECNOWINMEM := DISKRECORD;
  33.       END;
  34.   END;
  35. {================================================================}
  36. {              PRINT LABEL AND DATA PROCEDURE                    }
  37. {================================================================}
  38. PROCEDURE PRINTLABDAT( Z : INTEGER );
  39. VAR
  40.   W  :  INTEGER;
  41.  
  42.   BEGIN
  43.     IF ROW[Z] <23 THEN
  44.       BEGIN
  45.         GOTOXY(COLUMN[Z],ROW[Z]);
  46.         FOR W := LABELPOSN[Z] TO LABELPOSN[Z+1]-1 DO
  47.         WRITE (LBL[W]);
  48.         ANS := '';
  49.         GETDATAFROMARRAY(ANS);
  50.         IF DATAFORM[Z] <> ASCII THEN EDIT(ANS);
  51.         WRITE(': ' + ANS);
  52.       END;
  53.   END;
  54. {================================================================}
  55. {                 DISPLAY ONE RECORD PROCEDURE                   }
  56. {================================================================}
  57. PROCEDURE DISPLAYREC;
  58. BEGIN
  59.   CLRSCR;
  60.   FOR Z := 1 TO FIELDPERRECORD DO
  61.   PRINTLABDAT(Z);
  62.   GOTOXY(70,23);
  63.   WRITE('RECORD ',DATARECORD);
  64.   LASTRECUSED := DATARECORD;
  65. END;
  66. {================================================================}
  67. {                 FIELD DATA MESSAGE PROCEDURE                   }
  68. {================================================================}
  69. PROCEDURE FIELDDATAMSG;
  70. BEGIN
  71.   GOTOXY(1,24);
  72.   WRITE('FIELD DATA EDIT MODE     [ USE WORDSTAR EDIT ');
  73.   WRITE('COMMANDS ]       F1 = RECORD DONE');
  74. END;
  75. {================================================================}
  76. {                  DELETE RECORD PROCEDURE                       }
  77. {================================================================}
  78. PROCEDURE DELETEREC;
  79.   BEGIN
  80.     GOTOXY(1,24);
  81.     CLREOL;
  82.     WRITE('OK TO DELETE (Y/N)  ');
  83.     READ(KBD,CH);
  84.     IF CH IN ['Y','y'] THEN
  85.       BEGIN
  86.         FILLCHAR(GETDATA[PRECBYTE+1],RCDLEN,' ');
  87.         FILERECCHGD := TRUE;
  88.         DISPLAYREC;
  89.       END;
  90.    END;
  91. {================================================================}
  92. {                   ENTER TARGET PROCEDURE                       }
  93. {================================================================}
  94. PROCEDURE ENTERTARGET;
  95. BEGIN
  96.   GOTOXY(1,24);
  97.   WRITE('ENTER TARGET : ');
  98.   CLREOL;
  99.   TARGET := '';
  100.   KEYIN(TARGET,16,24,20);
  101.   CASE CH1 OF
  102.     #67,#68 :
  103.           BEGIN
  104.             TARGET := LASTTARGET;
  105.             GOTOXY(16,24);
  106.             REVVIDEO;
  107.             WRITE(TARGET);
  108.             REGVIDEO;
  109.           END
  110.     ELSE  { CASE TARGET[1] OF }
  111.           BEGIN
  112.             LASTTARGET := TARGET;
  113.           END;
  114.     END;  { CASE TARGET[1] OF }
  115. END;
  116. {================================================================}
  117. {                  ENTER FIELD DATA PROCEDURE                    }
  118. {================================================================}
  119. PROCEDURE ENTERFIELD;
  120. VAR
  121.   W     :  INTEGER;
  122.  
  123. BEGIN
  124.   Z := 1;
  125.   REPEAT
  126.     BEGIN
  127.       GETDATAFROMARRAY(ANS);
  128.       KEYIN(ANS,COLUMN[Z]+LABELLENGTH[Z]+2,ROW[Z],DATALEN[Z]);
  129.       CASE CH OF
  130.  
  131.         '\'    :
  132.           BEGIN                 { PROCESS BACKSLASH COMMANDS }
  133.             PRINTLABDAT(Z);
  134.             GOTOXY(1,23);
  135.             WRITE('FIELD NAME...');
  136.             ENTERTARGET;
  137.             DELLINE;
  138.             Z := 0;
  139.             REPEAT
  140.               Z := Z + 1;
  141.               ANS := '';
  142.               FOR W := LABELPOSN[Z] TO LABELPOSN[Z+1]-1 DO
  143.               ANS := ANS + LBL[W];
  144.               POSN := POS(TARGET,ANS);
  145.               IF Z = FIELDPERRECORD THEN
  146.                 BEGIN
  147.                   IF POSN = 0 THEN
  148.                     BEGIN
  149.                       Z := 1;
  150.                       POSN := 1;
  151.                     END;
  152.                 END;
  153.             UNTIL POSN <> 0;
  154.             GOTOXY(1,23);
  155.             WRITE('             ');
  156.             FIELDDATAMSG;
  157.           END;
  158.  
  159.         ^R  :                        { ^R = MOVE TO TOP OF FIELD }
  160.           BEGIN
  161.             PRINTLABDAT(Z);
  162.             STOREDATAINARRAY;
  163.             FILERECCHGD := TRUE;
  164.             Z := 1;
  165.           END;
  166.  
  167.         #27 :
  168.           BEGIN
  169.             CASE CH1 OF
  170.  
  171.             #59 :              { F1 KEY FOR HOME TO RECORD MODE }
  172.                BEGIN
  173.                  STOREDATAINARRAY;
  174.                  FILERECCHGD := TRUE;
  175.                  PRINTLABDAT(Z);
  176.                  Z := FIELDPERRECORD + 1;          { HOME KEY   }
  177.                END;
  178.  
  179.  
  180.             #64 :                      { F6 = UP ARROW FUNCTION }
  181.                BEGIN
  182.                  STOREDATAINARRAY;
  183.                  FILERECCHGD := TRUE;
  184.                  PRINTLABDAT(Z);
  185.                  IF Z>1 THEN Z := Z-1              { UP ARROW   }
  186.                  ELSE Z := FIELDPERRECORD;
  187.                END;
  188.  
  189.             #60,#66 :         { F2 = LINE FEED, F6 = DOWN ARROW }
  190.                BEGIN
  191.                  STOREDATAINARRAY;
  192.                  FILERECCHGD := TRUE;
  193.                  PRINTLABDAT(Z);
  194.                  Z := Z+1;             { LINE FEED & DOWN ARROW }
  195.                END;
  196.  
  197.  
  198.  
  199.             #67,#68  :            { UP [F9] OR DOWN [F10] SEARCH }
  200.                BEGIN
  201.                  W := Z;   { SAVE FIELD NUMBER }
  202.                  CONDITION := FALSE;
  203.                  GOTOXY(1,23);
  204.                  IF CH1 = #68 THEN
  205.                    BEGIN
  206.                      INCR := 1;
  207.                      WRITE('SEARCH UP...');
  208.                      IF DATARECORD = NBRRECUSED THEN CONDITION := TRUE;
  209.                    END
  210.                  ELSE
  211.                    BEGIN
  212.                      INCR := -1;
  213.                      WRITE('SEARCH DOWN...');
  214.                      IF DATARECORD = 1 THEN CONDITION := TRUE;
  215.                    END;
  216.                  ENTERTARGET;
  217.                  IF LENGTH(TARGET)>0 THEN
  218.                    BEGIN
  219.                      IF DATAFORM[Z] <> ASCII THEN
  220.                        BEGIN
  221.                          IF (TARGET[1] = '>') OR (TARGET[1]='<') THEN
  222.                            BEGIN
  223.                              SEARCHTYPE := TARGET[1];
  224.                              TARGET := COPY(TARGET,2,LENGTH(TARGET)-1);
  225.                            END
  226.                          ELSE SEARCHTYPE := '=';
  227.                          STRINGTOREAL(TARGET,TARGETVALUE,CODE);
  228.                        END;
  229.                      WHILE CONDITION = FALSE DO
  230.                        BEGIN
  231.                          DATARECORD := DATARECORD + INCR;
  232.                          GETDATAREC;
  233.                          GOTOXY(70,23);
  234.                          CLREOL;
  235.                          WRITE('RECORD ',DATARECORD);
  236.                          GETDATAFROMARRAY(ANS);
  237.                          IF DATAFORM[Z] <> ASCII THEN
  238.                            BEGIN
  239.                              STRINGTOREAL(ANS,NUMVALUE,CODE);
  240.                              CASE SEARCHTYPE OF
  241.                                '>' : IF NUMVALUE>TARGETVALUE THEN
  242.                                      CONDITION := TRUE;
  243.                                '<' : IF NUMVALUE<TARGETVALUE THEN
  244.                                      CONDITION := TRUE;
  245.                                '=' : IF NUMVALUE = TARGETVALUE THEN
  246.                                      CONDITION := TRUE;
  247.                              END; { CASE SEARCHTYPE }
  248.                            END
  249.                          ELSE
  250.                            BEGIN
  251.                              POSN := POS(TARGET,ANS);
  252.                              IF POSN <> 0 THEN CONDITION := TRUE;
  253.                            END;
  254.                          IF DATARECORD >= NBRRECUSED THEN CONDITION := TRUE;
  255.                          IF DATARECORD <= 1 THEN CONDITION := TRUE;
  256.                          IF KEYPRESSED = TRUE THEN
  257.                            BEGIN
  258.                             CONDITION := TRUE;
  259.                             ABORTCHAR := TRUE;
  260.                            END;
  261.                        END; { WHILE CONDITION... }
  262.                      DISPLAYREC;
  263.                    END
  264.                  ELSE
  265.                    BEGIN
  266.                      GOTOXY(1,23);
  267.                      WRITE('              ');
  268.                    END;
  269.                  FIELDDATAMSG;
  270.                  Z := W;   { RESTORE FIELD NUMBER }
  271.                END;  { CASE OF ^L (UP ARROW) OR ^H (DOWN ARROW) }
  272.  
  273.  
  274.             END;  { CASE OF #27 }
  275.           END;  { #27 BEGIN }
  276.       ELSE { CASE CH OF }
  277.           BEGIN
  278.             STOREDATAINARRAY;
  279.             FILERECCHGD := TRUE;
  280.             PRINTLABDAT(Z);
  281.             Z := Z+1;
  282.           END;  { ELSE BEGIN }
  283.       END; { CASE CH OF }
  284.     END; {REPEAT BEGIN }
  285.   UNTIL Z > FIELDPERRECORD;
  286. END;
  287.