home *** CD-ROM | disk | FTP | other *** search
/ Dr. CD ROM (Annual Premium Edition) / premium.zip / premium / DOSGRAPH / GIFRES10.ZIP / GIFRES.ASM < prev    next >
Assembly Source File  |  1993-03-04  |  6KB  |  168 lines

  1. ;GIFRES v1.00 Copyright (C) 1993 R.JANORKAR 03/04/93
  2. ;Detects GIF image resolutions and returns ERRORLEVELs
  3. ;       0 = Resolution is 640x480 or better
  4. ;       1 = Resolution is under 640x480
  5. ;       2 = Not a GIF file
  6. ;     255 = File not found or read error.
  7.  
  8. ;Compiled with MicroSoft Macro Assembler (MASM) v5.1
  9. ;Linked with MicroSoft Linker v5.13
  10.  
  11. ;Freeware, NO registration required, use and distribute freely!
  12. ;The author retains all rights to this source code.
  13.  
  14. ;This program and source code is provided with NO warrantees, expressed
  15. ;or implied. Use it at your own risk. The author of this program code
  16. ;will NOT be liable for any damages, direct or indirect, arising from the
  17. ;ability or disability to use this program. The use of this program on
  18. ;your computer system indicates your acceptance of these disclaimers.
  19.  
  20. ;Simply reads first 10 bytes of file, identifies header (if GIF or not)
  21. ;then checks resolution. Returns over/under 640x480 resolution via
  22. ;DOS ERRORLEVELS.
  23.  
  24. ;Syntax: GIFRES <\path\filename.ext>
  25.  
  26. ;Feedback welcomed, Ron Janorkar
  27. ;                   651 Richmond Road,
  28. ;                   Staten Island, NY 10304-2409
  29. ;               BBS (718) 876-0337
  30.  
  31. STACK     SEGMENT PARA STACK 'STACK'
  32.  
  33. STACK     ENDS
  34.  
  35. _DATA     SEGMENT WORD PUBLIC 'DATA'
  36.  
  37. MESSAGE DB      ".GIF Resolution detection utility v1.00 (C)1993 R.Janorkar",0Dh,0Ah,24h
  38. BAD_CMD DB      "Syntax error: GIFRES <\path\filename.ext>",0Dh,0Ah
  39.         DB      "ERRORLEVELs returned: 0 = resolution 640x480 or better,",0Dh,0Ah
  40.         DB      "                      1 = resolution under 640x480,",0Dh,0Ah
  41.         DB      "                      2 = not a GIF file,",0Dh,0Ah
  42.         DB      "                    255 = error File not found.",0Dh,0Ah,24h
  43. BAD_FILE DB     "Error: File not found or unable to read file!",0Dh,0Ah,24h
  44. GIF_ERR DB      "Not a GIF file!",0Dh,0Ah,24h
  45. GOOD_RES DB     "Over 640x480 resolution.",0Dh,0Ah,24h
  46. BAD_RES  DB     "Poor resolution GIF detected!",0Dh,0Ah,24h
  47. READ_BUFF DB    10 DUP(0)
  48.  
  49. _DATA     ENDS
  50.  
  51. _TEXT     SEGMENT WORD PUBLIC 'CODE'
  52.           ASSUME   CS:_TEXT,DS:_DATA,SS:STACK
  53.  
  54. start:
  55.         MOV     SI,0080h                ;GET FILE NAME
  56.         XOR     CH,CH
  57.  
  58.         LODSB           ;GET SIZE
  59.         CMP     AL,0    ;IS IT 0?
  60.         JZ      CMD_ERR ;THEN NO COMMAND LINE, ERROR
  61.         CMP     AL,1    ;OR 1?
  62.         JZ      CMD_ERR ;THEN NO COMMAND LINE, ERROR
  63.  
  64.         MOV     CL,AL   ;SAVE IN CX
  65.         LODSB           ;DISCARD FIRST BYTE
  66.  
  67. LOSE_SPACE:
  68.         DEC     CX      ;ADJUST COUNTER
  69.         LODSB           ;GET CHARACTER
  70.         CMP     AL,20h  ;IS IT A SPACE?
  71.         JZ      LOSE_SPACE      ;REPEAT TILL NO MORE SPACES
  72.         MOV     DX,SI   ;SAVE IN DX
  73.         DEC     DX      ;ADJUST POINTER
  74.  
  75. FIND_SPACE:
  76.         LODSB           ;GET NEXT CHARACTER
  77.         CMP     AL,20h  ;IS IT SPACE?
  78.         JZ      FOUND_SPACE     ;GET OUT
  79.         CMP     AL,0Dh  ;IS IT END OF LINE?
  80.         JZ      FOUND_SPACE     ;GET OUT
  81.         LOOP    FIND_SPACE      ;REPEAT TILL END OF LINE
  82. CMD_ERR:
  83.         MOV     AX,_DATA        ;GET DS
  84.         MOV     DS,AX
  85.         MOV     DX,OFFSET BAD_CMD       ;SHOW MESSAGE
  86.  
  87. ERROR_HANDLER:
  88.         MOV     AH,09h          ;SHOW IT
  89.         INT     21h
  90.         MOV     AX,4CFFh        ;TERMINATE WITH ERRORLEVEL 255
  91.         INT     21h
  92.  
  93. FOUND_SPACE:
  94.         DEC     SI      ;BACK UP A TAD
  95.         XOR     AL,AL   ;STUFF ZERO (NULL TERMINATED)
  96.         MOV     BYTE PTR[SI],AL
  97.  
  98.         MOV     AX,3D00h                ;OPEN FILE
  99.         INT     21h
  100.         JNC     FILE_OPENED     ;CARRY ON ERROR
  101. FILE_ERR:
  102.         MOV     AX,_DATA        ;GET DS
  103.         MOV     DS,AX
  104.         MOV     DX,OFFSET BAD_FILE      ;SHOW MESSAGE
  105.         JMP     ERROR_HANDLER
  106.  
  107. FILE_OPENED:
  108.         PUSH    AX
  109.  
  110.         MOV     AX,_DATA                ;GET DS
  111.         MOV     DS,AX
  112.  
  113.         POP     BX              ;GET HANDLE
  114.         MOV     AH,3Fh          ;READ FILE
  115.         MOV     CX,10           ;READ ONLY 10 BYTES
  116.         MOV     DX,OFFSET READ_BUFF     ;POINTER TO BUFFER
  117.         INT     21h
  118.         JC      FILE_ERR        ;CARRY ON ERROR
  119.  
  120.         MOV     AH,3Eh
  121.         INT     21h             ;CLOSE THE FILE
  122.  
  123.         MOV     SI,OFFSET READ_BUFF
  124.         LODSB           ;CHECK SIGNATURE
  125.         CMP     AL,"G"
  126.         JNZ     NOT_GIF
  127.         LODSB
  128.         CMP     AL,"I"
  129.         JNZ     NOT_GIF
  130.         LODSB
  131.         CMP     AL,"F"
  132.         JZ      IS_GIF
  133.  
  134. NOT_GIF:
  135.         MOV     DX,OFFSET GIF_ERR       ;SHOW MESSAGE
  136.         MOV     AH,09
  137.         INT     21h
  138.         MOV     AX,4C02h                ;ERRORLEVEL 2 NOT GIF
  139.         INT     21h
  140.  
  141. IS_GIF:
  142.         ADD     SI,3    ;JUMP OVER HEADER
  143.         LODSW                   ;GET RESOLUTION
  144.         CMP     AX,640          ;COMPARE AGAINST 640
  145.         JAE     OVER_640
  146. POOR:
  147.         MOV     DX,OFFSET BAD_RES       ;SHOW MESSAGE FOR BAD RESOLUTION
  148.         MOV     AH,09
  149.         INT     21h
  150.         MOV     AX,4C01h        ;TERMINATE ERRORLEVEL 1
  151.         INT     21h
  152.  
  153. OVER_640:
  154.         LODSW           ;GET RESOLUTION
  155.         CMP     AX,480  ;COMPARE AGAINST 480
  156.         JAE     OVER_480
  157.         JMP     SHORT POOR
  158.  
  159. OVER_480:
  160.         MOV     DX,OFFSET GOOD_RES      ;SHOW MESSAGE
  161.         MOV     AH,09
  162.         INT     21h
  163.         MOV     AX,4C00h                ;TERMINATE ERRORLEVEL 0
  164.         INT     21h
  165.  
  166. _TEXT     ENDS
  167.           END    start
  168.