home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / clarion / extract.zip / EXTRACT.CLA next >
Text File  |  1989-08-31  |  3KB  |  109 lines

  1. EXTRACT         PROGRAM
  2.          INCLUDE('\CLARION\STD_KEYS.CLA')
  3. REJECT_KEY   EQUATE(CTRL_ESC)
  4.  
  5. INPUT_FILE   STRING(35)
  6. OUTPUT_FILE  STRING(35)
  7. TOTAL_BYTES  LONG
  8. BYTES_READ   LONG
  9. RECORD_CT    LONG
  10. PERCENT         BYTE
  11. CHECK         STRING(4)
  12.  
  13.  
  14. SOURCE_FL    DOS,ASCII,NAME(INPUT_FILE),PRE(SRC)
  15.            RECORD
  16. RECORD         STRING(132)
  17.          . .
  18.  
  19. NEW_FILE     DOS,ASCII,NAME(OUTPUT_FILE),PRE(NEW)
  20.            RECORD
  21. RECORD         STRING(132)
  22.          . .
  23.  
  24.  
  25.  
  26. SCREEN         SCREEN      WINDOW(25,80),HUE(15,1)
  27.            ROW(5,20)  PAINT(1,43),HUE(0,7)
  28.            ROW(5,63)  PAINT(16,15),HUE(0,7)
  29.            ROW(18,5)  PAINT(3,59),HUE(0,7)
  30.            ROW(5,5)      PAINT(13,15),HUE(0,7)
  31.            ROW(8,12)  PAINT(8,59),HUE(15,1)
  32.            ROW(1,1)      REPEAT(7);STRING('▒{80}'),HUE(7,0) .
  33.            ROW(8,1)      STRING('▒{11}<0{58}>▒{11}'),HUE(7,0)
  34.            ROW(9,1)      REPEAT(8);STRING('▒{11}<0{58}>░▒{10}'),HUE(7,0) .
  35.            ROW(17,1)  STRING('▒{13}░{57}▒{10}'),HUE(7,0)
  36.            ROW(18,1)  REPEAT(8);STRING('▒{80}'),HUE(7,0) .
  37.            ROW(8,12)  STRING('╔═{56}╗'),HUE(15,1)
  38.            ROW(9,12)  REPEAT(6);STRING('║<0{56}>║'),HUE(15,1) .
  39.            ROW(16,12) STRING('╚═{56}╝'),HUE(15,1)
  40.            ROW(15,12) STRING('║<0{56}>║')
  41.            ROW(9,14)  STRING(' {5}'),HUE(15,1)
  42.          COL(24)  STRING(' File Structure Extraction Utility {11}')       |
  43.                 HUE(15,1)
  44.            ROW(10,14) STRING('    '),HUE(15,1)
  45.          COL(26)  STRING(' '),HUE(15,1)
  46.          COL(35)  STRING('Release 1.0'),HUE(15,1)
  47.            ROW(12,14) STRING('Input File:  '),HUE(11,1)
  48.          COL(27)  ENTRY(@S35),USE(INPUT_FILE),HUE(14,1),SEL(0,7),UPR
  49.            ROW(13,14) STRING('Output File: '),HUE(11,1)
  50.          COL(27)  ENTRY(@S35),USE(OUTPUT_FILE),HUE(14,1),SEL(0,7),REQ
  51. PERCENT_COMP   ROW(15,27) STRING(30),HUE(15,1)
  52.          .
  53.  
  54.          CODE
  55.          OPEN(SCREEN)             ! DISPLAY SCREEN
  56.          ALERT(REJECT_KEY)
  57.          ACCEPT                 ! GET INPUT FILE NAME
  58.          IF KEYCODE() = REJECT_KEY THEN RETURN.
  59.          ACCEPT                 ! GET OUTPUT FILE NAME
  60.          IF KEYCODE() = REJECT_KEY THEN RETURN.
  61.  
  62.          OPEN(SOURCE_FL)             !  OPEN SOURCE FILE
  63.          IF ERROR() THEN STOP(ERROR()).     !  IF NOT FOUND, EXIT
  64.  
  65.          CREATE(NEW_FILE)             !  CREATE THE NEW OUTPUT FILE
  66.  
  67.          TOTAL_BYTES = BYTES(SOURCE_FL)     !  FOR CALCULATING
  68.                          !  PERCENTAGE OF COMPLETION
  69.  
  70.          SET(SOURCE_FL)
  71.          LOOP UNTIL EOF(SOURCE_FL)         !  READ FROM START TO END
  72.          NEXT(SOURCE_FL)
  73.          BYTES_READ += BYTES(SOURCE_FL)
  74.          PERCENT = BYTES_READ / TOTAL_BYTES * 100
  75.          PERCENT_COMP = 'Working ... '& FORMAT(PERCENT,@P<<#% CompleteP)
  76.  
  77.                            !  START FILTERING FILE
  78.                            !  LOOK FOR A RECORD THAT
  79.                            !  HAS THE WORD 'FILE' IN
  80.                            !  POSITION 14 OF THE STRING
  81.  
  82.          CHECK = SUB(SRC:RECORD,14,4)
  83.          IF CHECK <> 'FILE' THEN CYCLE.
  84.  
  85.          ! IF THIS IS THE START OF A FILE STRUCTURE
  86.          ! THEN COPY ALL RECORDS UNTIL YOU LOCATE
  87.          ! TWO CLOSING PERIODS
  88.  
  89.          NEW:RECORD = SRC:RECORD
  90.          ADD(NEW_FILE)
  91.  
  92.          LOOP UNTIL EOF(SOURCE_FL)
  93.            NEXT(SOURCE_FL)
  94.              BYTES_READ += BYTES(SOURCE_FL)
  95.              PERCENT = BYTES_READ / TOTAL_BYTES * 100
  96.              PERCENT_COMP = 'Working ... '& FORMAT(PERCENT,@P<<#% CompleteP)
  97.              CHECK = SUB(SRC:RECORD,14,4)
  98.              IF CHECK = '. . ' THEN BREAK.
  99.                NEW:RECORD = SRC:RECORD
  100.                ADD(NEW_FILE)
  101.          .
  102.          IF NOT EOF(SOURCE_FL)
  103.            NEW:RECORD = SRC:RECORD
  104.            ADD(NEW_FILE)
  105.          .     .
  106.          CLOSE(SOURCE_FL)
  107.          CLOSE(NEW_FILE)
  108.  
  109.