Sign up on the Revelation Software website to have access to the most current content, and to be able to ask questions and get answers from the Revelation community

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

REPEAT



I 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.

View this thread on the forum...

  • third_party_content/community/commentary/forums_nonworks/78147473e155bb4085256775001a268e.txt
  • Last modified: 2024/01/04 21:00
  • by 127.0.0.1