PIF File Format (AREV Specific)
At 18 MAY 1999 12:45:38AM victor_engel@dell.com wrote:
On Friday I bought the book Windows(TM) Undocumented File Formats, by Pete Davis and Mike Wallace. The reason I got it was for the PIF file format, which is described therein. I have quickly thrown together a program in Arev in an attempt to follow the text and discern the PIF layout. Following is a copy of the program.
* LAYOUT GLEANED FROM "WINDOWS(TM) UNDOCUMENTED FILE FORMATS * BY PETE DAVIS AND MIKE WALLACE * CONVERTED TO AREV FORMAT BY VICTOR ENGEL * * Save this program to a file and compile * Run using the syntax RUN file prog pif_path * where pif_path is the 8.3 convention file name for the pif file * * Note: This program is for educational purposes only. Use at * your own risk. Verification of the performance of this program * is the responsibility of the user. Of particular note is the 386 * flags section, whose values seem to have the opposite value as * expected. * PIFNAME=@SENTENCE-1,'B ' PIFREC =XLATE('DOS',PIFNAME,'','X') IF LEN(PIFREC) ELSE CALL MSG('PIF FILE NOT FOUND') STOP END @VIEW.MODE=1 CALL INIT.VIEW(100) PAGE PRINT 'CHECKSUM :':SEQ(PIFREC2,1) PRINT 'TITLE :':PIFREC3,301,\00\ PRINT 'MAX MEM :':256*SEQ(PIFREC34,1) + SEQ(PIFREC33,1):'K' PRINT 'MIN MEM :':256*SEQ(PIFREC36,1) + SEQ(PIFREC35,1):'K' PRINT 'PROG PATH :':PIFREC37,631,\00\ CLOSE_ON_EXIT_BYTE=PIFREC100,1 BCLOSE_ON_EXIT_BYTE=OCONV(SEQ(CLOSE_ON_EXIT_BYTE),'MB') PRINT 'DIRECT COM1 :':BCLOSE_ON_EXIT_BYTE1,1 PRINT 'DIRECT COM2 :':BCLOSE_ON_EXIT_BYTE2,1 PRINT 'CLOSE ON EXIT :':BCLOSE_ON_EXIT_BYTE4,1 PRINT 'NO SCR EXCHANGE:':BCLOSE_ON_EXIT_BYTE5,1 PRINT 'PREVENT SWITCH :':BCLOSE_ON_EXIT_BYTE6,1 PRINT 'GRAPHICS :':BCLOSE_ON_EXIT_BYTE7,1 PRINT 'DEF_DRV :':PIFREC101,1 PRINT 'START DIR :':PIFREC102,641,\00\ PRINT 'PARAMETERS :':PIFREC166,641,\00\ PRINT 'INIT SCREEN MD :':SEQ(PIFREC230,1) PRINT 'ROWS :':SEQ(PIFREC234,1) PRINT 'COLUMNS :':SEQ(PIFREC235,1) PRINT 'WINDOW POS ROW :':SEQ(PIFREC236,1) PRINT 'WINDOW POS COL :':SEQ(PIFREC237,1) PRINT 'SYS MEMORY :':SEQ(PIFREC238,1) PRINT 'SHARED PROGNAME:':PIFREC239,641,\00\ PRINT 'SHARED DATAFILE:':PIFREC303,641,\00\ PRINT 'DIRECT KEYBD :':SEQ(PIFREC368,1) NEXT_HEADER_CHAR=PIFREC386,2 LOOP UNTIL NEXT_HEADER_CHAR=\FFFF\ NEXT_HEADER_POS=SEQ(NEXT_HEADER_CHAR1,1) + 256 * SEQ(NEXT_HEADER_CHAR2,1) + 1 PRINT 'NEXT HEADER POS:':NEXT_HEADER_POS SECTION_NAME=PIFRECNEXT_HEADER_POS,161,\00\ DATSIZE=SEQ(PIFRECNEXT_HEADER_POS+20,1) + 256 * SEQ(PIFRECNEXT_HEADER_POS+21,1) PRINT 'DATA SIZE :':DATSIZE PRINT 'SECTION :':SECTION_NAME BEGIN CASE CASE SECTION_NAME=WINDOWS 386 3.0' SECTION=PIFRECNEXT_HEADER_POS+22,DATSIZE PRINT 'MEMORY LIMIT :':SEQ(SECTION1,1) + 256 * SEQ(SECTION2,1) PRINT "MEMORY REQUIRED:":SEQ(SECTION3,1) + 256 * SEQ(SECTION4,1) PRINT "FOREGROUND PRI :":SEQ(SECTION5,1) + 256 * SEQ(SECTION6,1) PRINT "BACKGROUND PRI :":SEQ(SECTION7,1) + 256 * SEQ(SECTION8,1) PRINT "EMS MAX. :":SEQ(SECTION9,1) + 256 * SEQ(SECTION10,1) PRINT "EMS MIN. :":SEQ(SECTION11,1) + 256 * SEQ(SECTION12,1) PRINT "XMS MAX. :":SEQ(SECTION13,1) + 256 * SEQ(SECTION14,1) PRINT "XMS MIN. :":SEQ(SECTION15,1) + 256 * SEQ(SECTION16,1) FLAGS386=SECTION17,2 FLAGS386=OCONV(SEQ(FLAGS3861,1) + 256 * SEQ(FLAGS3862,1),'MB') "R(0)#16" PRINT "EMS LOCKED :":OCONV(NOT(FLAGS3861,1),'B') *PRINT "UNUSED :":OCONV(NOT(FLAGS3862,1),'B') PRINT "USES HMS :":OCONV(NOT(FLAGS3863,1),'B') PRINT "DETECT IDLE :":OCONV(NOT(FLAGS3864,1),'B') PRINT "CONTROL ESCAPE :":OCONV(NOT(FLAGS3865,1),'B') PRINT "PRINTSCREEN :":OCONV(NOT(FLAGS3866,1),'B') PRINT "ALT-PRTSCRN :":OCONV(NOT(FLAGS3867,1),'B') PRINT "ALT-ENTER :":OCONV(NOT(FLAGS3868,1),'B') PRINT "ALT-SPACE :":OCONV(NOT(FLAGS3869,1),'B') PRINT "ALT-ESCAPE :":OCONV(NOT(FLAGS38610,1),'B') PRINT "ALT-TAB :":OCONV(NOT(FLAGS38611,1),'B') *PRINT "UNUSED :":OCONV(NOT(FLAGS38612,1),'B') PRINT "FULLSCREEN :":OCONV(NOT(FLAGS38613,1),'B') PRINT "EXCLUSIVE :":OCONV(NOT(FLAGS38614,1),'B') PRINT "BACKGROUND :":OCONV(NOT(FLAGS38615,1),'B') PRINT "CLOSE IF ACTIVE:":OCONV(NOT(FLAGS38616,1),'B') *PRINT '386 FLAGS :':FLAGS386 FLAGSXMS=SECTION19,2 FLAGSXMS=OCONV(SEQ(FLAGSXMS1,1) + 256 * SEQ(FLAGSXMS2,1),'MB') "R(0)#16" PRINT "LOCK APP MEM :":OCONV(FLAGSXMS14,1,'B') PRINT "ALLOW PASTPASTE:":OCONV(FLAGSXMS15,1,'B') PRINT "XMS LOCKED :":OCONV(FLAGSXMS16,1,'B') *PRINT 'XMS FLAGS :':FLAGSXMS FLAGSVID=SECTION21,2 FLAGSVID=OCONV(SEQ(FLAGSVID1,1) + 256 * SEQ(FLAGSVID2,1),'MB') "R(0)#16" PRINT "RETAIN VIDEO :":OCONV(NOT(FLAGS3869,1),'B') PRINT "INITMODEHIGH :":OCONV(NOT(FLAGS38610,1),'B') PRINT "INITMODELO :":OCONV(NOT(FLAGS38611,1),'B') PRINT "INITMODETEXT :":OCONV(NOT(FLAGS38612,1),'B') PRINT "MONITORHIGH :":OCONV(NOT(FLAGS38613,1),'B') PRINT "MONITORLO :":OCONV(NOT(FLAGS38614,1),'B') PRINT "MONITORTEXT :":OCONV(NOT(FLAGS38615,1),'B') PRINT "EMULATETEXT :":OCONV(NOT(FLAGS38616,1),'B') *PRINT 'VID FLAGS :':FLAGSVID PRINT "HOTKEY SCAN :":SEQ(SECTION25,1) + 256 * SEQ(SECTION26,1) PRINT "HOTKEY STATE :":SEQ(SECTION27,1) + 256 * SEQ(SECTION28,1) PRINT "HOTKEY FLAG :":SEQ(SECTION29,1) + 256 * SEQ(SECTION30,1) PRINT "HK NUMERIC KEY :":SEQ(SECTION31,1) + 256 * SEQ(SECTION32,1) CASE SECTION_NAME=WINDOWS 286 3.0' CASE 1 PRINT 'UNKNOWN SECTION TYPE' END CASE NEXT_HEADER_CHAR=PIFRECNEXT_HEADER_POS+16,2 REPEATI guess you can tell by the code that it is known there is more to the layout than this, but this is all I saw that is relevant to Arev and that is actually documented. There is also a VMM section that probably would be relevant, but that section is not documented.