! EDWIN PDF DECODE PROGRAM external string(31) Version = "5", Release = "1", Revision = "0", Fname = "PDFDEC", Product Code = "PDFDEC" from Imp include Cliparse from LL include Common begin own integer XL = 0; !Origin of virtual window (Left edge) own integer XR = 1023; !(Right edge) own integer YB = 0; !(Bottom edge) own integer YT = 1023; !(Top edge) own integer A, B const string (15) array COM (0:15) = "Line abs", "Move abs", "Marker abs", "Line rel", "Move rel", "Marker rel", "Polygon", "Elipse", "Window", "Character", "", "Newframe", "Terminate EDWIN", "Rectangle", "Circle", "" const string (23) array ATT (0:15) = "Set colour", "Set line style", "Set char size", "Set char rot", "Set char quality", "Set char font", "Set char slant", "Set intensity", "Set speed", "Set colour mode", "Set shade mode", "Set chord step","Set char mirror", "Set polygon mode", "Set unknown att", "Aspect ratioing" routine PHEX (integer I) const byte integer array A(0:15) = '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' integer L SPACE for L=12,-4,0 cycle PRINT SYMBOL (A(I>>L&15)) repeat end routine INTERPRET ! PC=0 => PDF read from the input stream, else read from the array. !Interpret instructions in display file starting !at (relative) PC until an END instruction is found !For more information on display file layout, see GRAFIX.PDFDOC. !Codes are 0 LINEA 1 MOVEA 2 MARKERA ! 3 LINER 4 MOVER 5 MARKERR ! 6 SUBPIC 7 old END 8 WINDOW ! 9 CHAR 10 ATTRIBUTES 11 NEWFRAME 12 END integer WORD,CODE,X,Y,WX, WY switch C(0:15) cycle read (WORD) CODE=WORD&15 if CODE<=5 start; !Draw, Move, Point read(X) A = X if WORD&16=0 start; !Long form read(Y) finishelse start Y=X&255; X=X>>8&255 X=X!!(¬255) if X&128#0 Y=Y!!(¬255) if Y&128#0 finish finish ->C(CODE) C(0): C(1): C(2): C(3): C(4): C(5): ! MOVE LINE and MARKERs PHEX (WORD) PHEX (A) if WORD&16=0 then PHEX (Y) else SPACES (5) SPACES (20) PRINT STRING (COM(CODE)." (") WRITE (WORD>>12&15,0) and PRINT STRING (", ") if CODE=2 or CODE=5 WRITE (X,0); PRINT SYMBOL (',') WRITE (Y,1); PRINT SYMBOL (')') NEWLINE continue C(8): ! SET new WINDOW read(XL); read(XR); read(CODE); read (YB); read (YT) PHEX (WORD); PHEX (XL); PHEX (XR); PHEX (CODE); PHEX (YB); PHEX (YT) SPACES (5) PRINT STRING (COM(8)." (") WRITE (XL,0); PRINT SYMBOL (',') WRITE (XR,1); PRINT SYMBOL (',') WRITE (YB,1); PRINT SYMBOL (',') WRITE (YT,1); PRINT SYMBOL (')') NEWLINE continue C(9): ! Character C(11): ! Newframe C(12): ! Terminate PHEX (WORD) SPACES (30) PRINT STRING (COM(CODE)) if CODE=9 start PRINT STRING (" (") A = WORD >> 4 if 32<= A <= 127 start PRINT SYMBOL ('''') PRINT SYMBOL (A) PRINT SYMBOL ('''') finish else WRITE (A,0) PRINT SYMBOL (')') finish NEWLINE continue C(15): C(10): if CODE=10 then A=WORD>>4&255 else read(A) B = WORD >> 12 & 15 PHEX (WORD) if CODE=10 then SPACES(5) else PHEX (A) SPACES (25) PRINT STRING (COM(CODE).ATT(B)." (".ItoS(A,0).")") NEWLINE continue C(6): ! Polygon READ (WX) PHEX (WORD) SPACES (30) PRINT STRING ("! Polygon with ".ItoS(WX,0)." sides") NEWLINE for WY = 1, 1, WX cycle READ (X); READ (Y) repeat continue C(13): ! Rectangle READ (WX); READ (WY); READ (CODE); READ (X); READ (Y) PHEX (WORD) PHEX (WX); PHEX (WY); PHEX (CODE); PHEX (X); PHEX (Y) SPACES (5) PRINT STRING (COM(CODE)." (") WRITE (WX,0); PRINT STRING (", ") WRITE (WY,0); PRINT STRING (", ") WRITE (X,0); PRINT STRING (", ") WRITE (Y,0); PRINT SYMBOL (')') NEWLINE continue C(14): !Circle READ (X) PHEX (WORD) SPACES (30) PRINT STRING (COM(CODE)." (".ItoS(X,0).")") NEWLINE continue repeat C(*): PHEX (WORD) SPACES (30) PRINT STRING ("Unknown PDF command") NEWLINE PRINT STRING ("****** ANALYSIS ABANDONED *******") NEWLINE Fatal Error ("Analysis abandoned on unknown PDF command") end string (255) In file, Out file on 3,4,9 start if EVENT_EVENT # 9 start Fatal Error ("Corrupt PDF") finish stop finish if Qualifier Present("IDENTIFY") start Print Identification return unless Qualifier Present("FILE") finish In File = Qualifier S ("FILE") Out File = Qualifier S ("OUTPUT") Open LL Input (1, LL EDWIN PDF File, 0, In File, "") if Out file # "" start Open LL Output (2, LL Listing File, 0, Out file, "") Select output (2) else Select output (0) finish Prompt ("PDF data: ") Interpret end of program