Annotation of hatari/src/vdi.c, revision 1.1

1.1     ! root        1: /*
        !             2:   Hatari
        !             3: 
        !             4:   VDI (Virtual Device Interface) (Trap #2)
        !             5: 
        !             6:   To get higher resolutions on the Desktop, we intercept the VDI/Line-A calls and set elements
        !             7:   in their structures to the higher width/height/cel/planes. We need to intercept the initial Line-A
        !             8:   call(which we force into the TOS on boot-up) and also the init calls to the VDI.
        !             9:   As we intercept the VDI calls, this is a good point to pass them on to the accelerated native
        !            10:   PC functions if we need to - this improves drawing speed far greater than any ST software
        !            11:   accelerator.
        !            12: */
        !            13: 
        !            14: #include "main.h"
        !            15: #include "decode.h"
        !            16: /*#include "dialog.h"*/
        !            17: #include "file.h"
        !            18: #include "gemdos.h"
        !            19: #include "m68000.h"
        !            20: #include "memAlloc.h"
        !            21: #include "screen.h"
        !            22: #include "stMemory.h"
        !            23: #include "vdi.h"
        !            24: #include "video.h"
        !            25: 
        !            26: 
        !            27: enum {  /* Taken from dialogtosgem.h - Thothy */
        !            28:         GEMRES_640x480,
        !            29:         GEMRES_800x600,
        !            30:         GEMRES_1024x768
        !            31: };
        !            32: 
        !            33: enum {
        !            34:         GEMCOLOUR_2,
        !            35:         GEMCOLOUR_4,
        !            36:         GEMCOLOUR_16
        !            37: };
        !            38: 
        !            39: 
        !            40: BOOL bUseVDIRes=FALSE;             // Set to TRUE(if want VDI), or FALSE(ie for games)
        !            41: BOOL bHoldScreenDisplay=TRUE;      // Hold display until initialised VDI(prevents TOS >2.05 showing ATARI logo)
        !            42: int LineABase;                     // Line-A structure
        !            43: int FontBase;                      // Font base, used for 16-pixel high font
        !            44: unsigned int VDI_OldPC;            // When call Trap#2, store off PC
        !            45: 
        !            46: int VDIWidth=640,VDIHeight=480;    // 640x480,800x600 or 1024x768
        !            47: int VDIRes=0;                      // 0,1 or 2(low, medium, high)
        !            48: int VDIPlanes=4,VDIColours=16,VDICharHeight=8;  // To match VDIRes
        !            49: 
        !            50: unsigned long Control;
        !            51: unsigned long Intin;
        !            52: unsigned long Ptsin;
        !            53: unsigned long Intout;
        !            54: unsigned long Ptsout;
        !            55: 
        !            56: //-----------------------------------------------------------------------
        !            57: // Desktop TOS 1.04 and TOS 2.06 desktop configuration files
        !            58: unsigned char DesktopScript[504] = {
        !            59: 0x23,0x61,0x30,0x30,0x30,0x30,0x30,0x30,0x0D,0x0A,0x23,0x62,0x30,0x30,0x30,0x30,0x30,0x30,0x0D,0x0A,0x23,0x63,0x37,0x37,0x37,0x30,0x30,0x30,0x37,0x30,0x30,0x30,
        !            60: 0x36,0x30,0x30,0x30,0x37,0x30,0x30,0x35,0x35,0x32,0x30,0x30,0x35,0x30,0x35,0x35,0x35,0x32,0x32,0x32,0x30,0x37,0x37,0x30,0x35,0x35,0x37,0x30,0x37,0x35,0x30,0x35,
        !            61: 0x35,0x35,0x30,0x37,0x37,0x30,0x33,0x31,0x31,0x31,0x31,0x30,0x33,0x0D,0x0A,0x23,0x64,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
        !            62: 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0D,0x0A,
        !            63: 0x23,0x45,0x20,0x31,0x38,0x20,0x31,0x31,0x20,0x0D,0x0A,0x23,0x57,0x20,0x30,0x30,0x20,0x30,0x30,0x20,0x30,0x30,0x20,0x30,0x37,0x20,0x32,0x36,0x20,0x30,0x43,0x20,
        !            64: 0x30,0x30,0x20,0x40,0x0D,0x0A,0x23,0x57,0x20,0x30,0x30,0x20,0x30,0x30,0x20,0x30,0x32,0x20,0x30,0x42,0x20,0x32,0x36,0x20,0x30,0x39,0x20,0x30,0x30,0x20,0x40,0x0D,
        !            65: 0x0A,0x23,0x57,0x20,0x30,0x30,0x20,0x30,0x30,0x20,0x30,0x41,0x20,0x30,0x46,0x20,0x31,0x41,0x20,0x30,0x39,0x20,0x30,0x30,0x20,0x40,0x0D,0x0A,0x23,0x57,0x20,0x30,
        !            66: 0x30,0x20,0x30,0x30,0x20,0x30,0x45,0x20,0x30,0x31,0x20,0x31,0x41,0x20,0x30,0x39,0x20,0x30,0x30,0x20,0x40,0x0D,0x0A,0x23,0x4D,0x20,0x30,0x31,0x20,0x30,0x30,0x20,
        !            67: 0x30,0x30,0x20,0x46,0x46,0x20,0x43,0x20,0x48,0x41,0x52,0x44,0x20,0x44,0x49,0x53,0x4B,0x40,0x20,0x40,0x20,0x0D,0x0A,0x23,0x4D,0x20,0x30,0x30,0x20,0x30,0x30,0x20,
        !            68: 0x30,0x30,0x20,0x46,0x46,0x20,0x41,0x20,0x46,0x4C,0x4F,0x50,0x50,0x59,0x20,0x44,0x49,0x53,0x4B,0x40,0x20,0x40,0x20,0x0D,0x0A,0x23,0x4D,0x20,0x30,0x30,0x20,0x30,
        !            69: 0x31,0x20,0x30,0x30,0x20,0x46,0x46,0x20,0x42,0x20,0x46,0x4C,0x4F,0x50,0x50,0x59,0x20,0x44,0x49,0x53,0x4B,0x40,0x20,0x40,0x20,0x0D,0x0A,0x23,0x54,0x20,0x30,0x30,
        !            70: 0x20,0x30,0x33,0x20,0x30,0x32,0x20,0x46,0x46,0x20,0x20,0x20,0x54,0x52,0x41,0x53,0x48,0x40,0x20,0x40,0x20,0x0D,0x0A,0x23,0x46,0x20,0x46,0x46,0x20,0x30,0x34,0x20,
        !            71: 0x20,0x20,0x40,0x20,0x2A,0x2E,0x2A,0x40,0x20,0x0D,0x0A,0x23,0x44,0x20,0x46,0x46,0x20,0x30,0x31,0x20,0x20,0x20,0x40,0x20,0x2A,0x2E,0x2A,0x40,0x20,0x0D,0x0A,0x23,
        !            72: 0x47,0x20,0x30,0x33,0x20,0x46,0x46,0x20,0x20,0x20,0x2A,0x2E,0x41,0x50,0x50,0x40,0x20,0x40,0x20,0x0D,0x0A,0x23,0x47,0x20,0x30,0x33,0x20,0x46,0x46,0x20,0x20,0x20,
        !            73: 0x2A,0x2E,0x50,0x52,0x47,0x40,0x20,0x40,0x20,0x0D,0x0A,0x23,0x50,0x20,0x30,0x33,0x20,0x46,0x46,0x20,0x20,0x20,0x2A,0x2E,0x54,0x54,0x50,0x40,0x20,0x40,0x20,0x0D,
        !            74: 0x0A,0x23,0x46,0x20,0x30,0x33,0x20,0x30,0x34,0x20,0x20,0x20,0x2A,0x2E,0x54,0x4F,0x53,0x40,0x20,0x40,0x20,0x0D,0x0A,0x1A,
        !            75: };
        !            76: 
        !            77: unsigned char NewDeskScript[786] = {
        !            78: 0x23,0x61,0x30,0x30,0x30,0x30,0x30,0x30,0x0D,0x0A,0x23,0x62,0x30,0x30,0x30,0x30,0x30,0x30,0x0D,0x0A,0x23,0x63,0x37,0x37,0x37,0x30,0x30,0x30,0x37,0x30,0x30,0x30,
        !            79: 0x36,0x30,0x30,0x30,0x37,0x30,0x30,0x35,0x35,0x32,0x30,0x30,0x35,0x30,0x35,0x35,0x35,0x32,0x32,0x32,0x30,0x37,0x37,0x30,0x35,0x35,0x37,0x30,0x37,0x35,0x30,0x35,
        !            80: 0x35,0x35,0x30,0x37,0x37,0x30,0x33,0x31,0x31,0x31,0x31,0x30,0x33,0x0D,0x0A,0x23,0x64,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
        !            81: 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0D,0x0A,
        !            82: 0x23,0x4B,0x20,0x34,0x46,0x20,0x35,0x33,0x20,0x34,0x43,0x20,0x30,0x30,0x20,0x34,0x36,0x20,0x34,0x32,0x20,0x34,0x33,0x20,0x35,0x37,0x20,0x34,0x35,0x20,0x35,0x38,
        !            83: 0x20,0x30,0x30,0x20,0x30,0x30,0x20,0x30,0x30,0x20,0x30,0x30,0x20,0x30,0x30,0x20,0x30,0x30,0x20,0x30,0x30,0x20,0x30,0x30,0x20,0x30,0x30,0x20,0x30,0x30,0x20,0x30,
        !            84: 0x30,0x20,0x30,0x30,0x20,0x30,0x30,0x20,0x35,0x32,0x20,0x30,0x30,0x20,0x30,0x30,0x20,0x34,0x44,0x20,0x35,0x36,0x20,0x35,0x30,0x20,0x30,0x30,0x20,0x40,0x0D,0x0A,
        !            85: 0x23,0x45,0x20,0x31,0x38,0x20,0x30,0x31,0x20,0x30,0x30,0x20,0x30,0x36,0x20,0x0D,0x0A,0x23,0x51,0x20,0x34,0x31,0x20,0x34,0x30,0x20,0x34,0x33,0x20,0x34,0x30,0x20,
        !            86: 0x34,0x33,0x20,0x34,0x30,0x20,0x0D,0x0A,0x23,0x57,0x20,0x30,0x30,0x20,0x30,0x30,0x20,0x30,0x30,0x20,0x30,0x37,0x20,0x32,0x36,0x20,0x30,0x43,0x20,0x30,0x30,0x20,
        !            87: 0x40,0x0D,0x0A,0x23,0x57,0x20,0x30,0x30,0x20,0x30,0x30,0x20,0x30,0x32,0x20,0x30,0x42,0x20,0x32,0x36,0x20,0x30,0x39,0x20,0x30,0x30,0x20,0x40,0x0D,0x0A,0x23,0x57,
        !            88: 0x20,0x30,0x30,0x20,0x30,0x30,0x20,0x30,0x41,0x20,0x30,0x46,0x20,0x31,0x41,0x20,0x30,0x39,0x20,0x30,0x30,0x20,0x40,0x0D,0x0A,0x23,0x57,0x20,0x30,0x30,0x20,0x30,
        !            89: 0x30,0x20,0x30,0x45,0x20,0x30,0x31,0x20,0x31,0x41,0x20,0x30,0x39,0x20,0x30,0x30,0x20,0x40,0x0D,0x0A,0x23,0x57,0x20,0x30,0x30,0x20,0x30,0x30,0x20,0x30,0x34,0x20,
        !            90: 0x30,0x37,0x20,0x32,0x36,0x20,0x30,0x43,0x20,0x30,0x30,0x20,0x40,0x0D,0x0A,0x23,0x57,0x20,0x30,0x30,0x20,0x30,0x30,0x20,0x30,0x43,0x20,0x30,0x42,0x20,0x32,0x36,
        !            91: 0x20,0x30,0x39,0x20,0x30,0x30,0x20,0x40,0x0D,0x0A,0x23,0x57,0x20,0x30,0x30,0x20,0x30,0x30,0x20,0x30,0x38,0x20,0x30,0x46,0x20,0x31,0x41,0x20,0x30,0x39,0x20,0x30,
        !            92: 0x30,0x20,0x40,0x0D,0x0A,0x23,0x57,0x20,0x30,0x30,0x20,0x30,0x30,0x20,0x30,0x36,0x20,0x30,0x31,0x20,0x31,0x41,0x20,0x30,0x39,0x20,0x30,0x30,0x20,0x40,0x0D,0x0A,
        !            93: 0x23,0x4E,0x20,0x46,0x46,0x20,0x30,0x34,0x20,0x30,0x30,0x30,0x20,0x40,0x20,0x2A,0x2E,0x2A,0x40,0x20,0x40,0x20,0x0D,0x0A,0x23,0x44,0x20,0x46,0x46,0x20,0x30,0x31,
        !            94: 0x20,0x30,0x30,0x30,0x20,0x40,0x20,0x2A,0x2E,0x2A,0x40,0x20,0x40,0x20,0x0D,0x0A,0x23,0x47,0x20,0x30,0x33,0x20,0x46,0x46,0x20,0x30,0x30,0x30,0x20,0x2A,0x2E,0x41,
        !            95: 0x50,0x50,0x40,0x20,0x40,0x20,0x40,0x20,0x0D,0x0A,0x23,0x47,0x20,0x30,0x33,0x20,0x46,0x46,0x20,0x30,0x30,0x30,0x20,0x2A,0x2E,0x50,0x52,0x47,0x40,0x20,0x40,0x20,
        !            96: 0x40,0x20,0x0D,0x0A,0x23,0x59,0x20,0x30,0x33,0x20,0x46,0x46,0x20,0x30,0x30,0x30,0x20,0x2A,0x2E,0x47,0x54,0x50,0x40,0x20,0x40,0x20,0x40,0x20,0x0D,0x0A,0x23,0x50,
        !            97: 0x20,0x30,0x33,0x20,0x46,0x46,0x20,0x30,0x30,0x30,0x20,0x2A,0x2E,0x54,0x54,0x50,0x40,0x20,0x40,0x20,0x40,0x20,0x0D,0x0A,0x23,0x46,0x20,0x30,0x33,0x20,0x30,0x34,
        !            98: 0x20,0x30,0x30,0x30,0x20,0x2A,0x2E,0x54,0x4F,0x53,0x40,0x20,0x40,0x20,0x40,0x20,0x0D,0x0A,0x23,0x4D,0x20,0x30,0x30,0x20,0x30,0x31,0x20,0x30,0x30,0x20,0x46,0x46,
        !            99: 0x20,0x43,0x20,0x48,0x41,0x52,0x44,0x20,0x44,0x49,0x53,0x4B,0x40,0x20,0x40,0x20,0x0D,0x0A,0x23,0x4D,0x20,0x30,0x30,0x20,0x30,0x30,0x20,0x30,0x30,0x20,0x46,0x46,
        !           100: 0x20,0x41,0x20,0x46,0x4C,0x4F,0x50,0x50,0x59,0x20,0x44,0x49,0x53,0x4B,0x40,0x20,0x40,0x20,0x0D,0x0A,0x23,0x4D,0x20,0x30,0x31,0x20,0x30,0x30,0x20,0x30,0x30,0x20,
        !           101: 0x46,0x46,0x20,0x42,0x20,0x46,0x4C,0x4F,0x50,0x50,0x59,0x20,0x44,0x49,0x53,0x4B,0x40,0x20,0x40,0x20,0x0D,0x0A,0x23,0x54,0x20,0x30,0x30,0x20,0x30,0x33,0x20,0x30,
        !           102: 0x32,0x20,0x46,0x46,0x20,0x20,0x20,0x54,0x52,0x41,0x53,0x48,0x40,0x20,0x40,0x20,0x0D,0x0A,
        !           103: };
        !           104: 
        !           105: //-----------------------------------------------------------------------
        !           106: /*
        !           107:   Set Width/Height/BitDepth according to passed GEMRES_640x480, GEMRES_800x600 or GEMRES_1024x768
        !           108: */
        !           109: void VDI_SetResolution(int GEMRes,int GEMColour)
        !           110: {
        !           111:   // Resolution
        !           112:   switch(GEMRes) {
        !           113:     case GEMRES_640x480:
        !           114:       VDIWidth = 640;
        !           115:       VDIHeight = 480;
        !           116:       break;
        !           117:     case GEMRES_800x600:
        !           118:       VDIWidth = 800;
        !           119:       VDIHeight = 600;
        !           120:       break;
        !           121:     case GEMRES_1024x768:
        !           122:       VDIWidth = 1024;
        !           123:       VDIHeight = 768;
        !           124:       break;
        !           125:   }
        !           126: 
        !           127:   // Colour depth
        !           128:   switch(GEMColour) {
        !           129:     case GEMCOLOUR_2:
        !           130:       VDIRes = 2;
        !           131:       VDIPlanes = 1;
        !           132:       VDIColours = 2;
        !           133:       VDICharHeight = 16;
        !           134:       break;
        !           135:     case GEMCOLOUR_4:
        !           136:       VDIRes = 1;
        !           137:       VDIPlanes = 2;
        !           138:       VDIColours = 4;
        !           139:       VDICharHeight = 8;
        !           140:       break;
        !           141:     case GEMCOLOUR_16:
        !           142:       VDIRes = 0;
        !           143:       VDIPlanes = 4;
        !           144:       VDIColours = 16;
        !           145:       VDICharHeight = 8;
        !           146:       break;
        !           147:   }
        !           148: 
        !           149:   // Force screen code to re-set bitmap/full-screen
        !           150:   Screen_SetDrawModes();
        !           151:   Screen_SetupRGBTable(bInFullScreen);
        !           152:   Screen_SetFullUpdate();
        !           153:   PrevSTRes = -1;
        !           154: 
        !           155:   // Write resolution to re-boot takes effect with correct bit-depth
        !           156:   VDI_FixDesktopInf();
        !           157: }
        !           158: 
        !           159: //-----------------------------------------------------------------------
        !           160: /*
        !           161:   Check VDI call and see if we need to re-direct to our own routines
        !           162:   Return TRUE if we've handled the exception, else return FALSE
        !           163: 
        !           164:   We enter here with Trap #2, so D1 is pointer to VDI vectors, ie Control, Intin, Ptsin etc...
        !           165: */
        !           166: BOOL VDI(void)
        !           167: {
        !           168:   unsigned long TablePtr = Regs[REG_D1];
        !           169: //  unsigned short int OpCode;
        !           170: 
        !           171:   // Read off table pointers
        !           172:   Control = STMemory_ReadLong(TablePtr);
        !           173:   Intin = STMemory_ReadLong(TablePtr+4);
        !           174:   Ptsin = STMemory_ReadLong(TablePtr+8);
        !           175:   Intout = STMemory_ReadLong(TablePtr+12);
        !           176:   Ptsout = STMemory_ReadLong(TablePtr+16);
        !           177: 
        !           178: //  OpCode = STMemory_ReadWord(Control);
        !           179:   // Check OpCode
        !           180:   // 8 - Text Font
        !           181: //  if (OpCode==9) {
        !           182: //    return(TRUE);
        !           183: //  }
        !           184: 
        !           185:   // Call as normal!
        !           186:   return(FALSE);
        !           187: }
        !           188: 
        !           189: //-----------------------------------------------------------------------
        !           190: /*
        !           191:   Modify Line-A structure for our VDI resolutions
        !           192: */
        !           193: void VDI_LineA(void)
        !           194: {
        !           195:   if (bUseVDIRes) {
        !           196:     STMemory_WriteWord(LineABase-6*2,VDIWidth);                      // v_rez_hz
        !           197:     STMemory_WriteWord(LineABase-2*2,VDIHeight);                     // v_rez_vt
        !           198:     STMemory_WriteWord(LineABase-1*2,(VDIWidth*VDIPlanes)/8);        // bytes_lin
        !           199:     STMemory_WriteWord(LineABase+1*2,(VDIWidth*VDIPlanes)/8);        // width
        !           200: 
        !           201:     STMemory_WriteWord(LineABase-23*2,VDICharHeight);                // char height
        !           202:     STMemory_WriteWord(LineABase-22*2,(VDIWidth/8)-1);               // v_cel_mx
        !           203:     STMemory_WriteWord(LineABase-21*2,(VDIHeight/VDICharHeight)-1);  // v_cel_my
        !           204:     STMemory_WriteWord(LineABase-20*2,VDICharHeight*((VDIWidth*VDIPlanes)/8));    // v_cel_wr
        !           205: 
        !           206:     STMemory_WriteWord(LineABase-0*2,VDIPlanes);                     // planes
        !           207:   }
        !           208: }
        !           209: 
        !           210: //-----------------------------------------------------------------------
        !           211: /*
        !           212:   This is called on completion of a VDI Trap, used to modify return structure for 
        !           213: */
        !           214: void VDI_Complete(void)
        !           215: {
        !           216:   unsigned short int OpCode;
        !           217: 
        !           218:   OpCode = STMemory_ReadWord(Control);
        !           219:   // Is 'Open Workstation', or 'Open Virtual Screen Workstation'?
        !           220:   if ( (OpCode==1) || (OpCode==100) ) {
        !           221:     STMemory_WriteWord(Intout,VDIWidth-1);                         // IntOut[0] Width-1
        !           222:     STMemory_WriteWord(Intout+1*2,VDIHeight-1);                    // IntOut[1] Height-1
        !           223:     STMemory_WriteWord(Intout+13*2,VDIColours);                    // IntOut[13] #colours
        !           224:     STMemory_WriteWord(Intout+39*2,512);                           // IntOut[39] #available colours
        !           225: 
        !           226:     STMemory_WriteWord(LineABase-0x15a*2,VDIWidth-1);              // WKXRez
        !           227:     STMemory_WriteWord(LineABase-0x159*2,VDIHeight-1);             // WKYRez
        !           228: 
        !           229:     VDI_LineA();                                         // And modify Line-A structure accordingly
        !           230: 
        !           231:     // Show screen(used to hide boot-up sequence in TOS >2.06)
        !           232:     bHoldScreenDisplay = FALSE;
        !           233:   }
        !           234: }
        !           235: 
        !           236: //-----------------------------------------------------------------------
        !           237: /*
        !           238:   This is called after completion of each VDI call
        !           239: */
        !           240: void VDI_OpCode(void)
        !           241: {
        !           242:   VDI_Complete();
        !           243: 
        !           244:   /* Set PC back to where originated from to continue instruction decoding */
        !           245: //FIXME   PC = VDI_OldPC;
        !           246: 
        !           247: //  RET
        !           248: }
        !           249: 
        !           250: //-----------------------------------------------------------------------
        !           251: /*
        !           252:   Save desktop configuration file for VDI, eg desktop.inf(TOS 1.04) or newdesk.inf(TOS 2.06)
        !           253: */
        !           254: void VDI_SaveDesktopInf(char *pszFileName,unsigned char *Script,long ScriptSize)
        !           255: {
        !           256:   // Just save file
        !           257:   File_Save(/*NULL,*/pszFileName,Script,ScriptSize,FALSE);
        !           258: }
        !           259: 
        !           260: //-----------------------------------------------------------------------
        !           261: /*
        !           262:   Modify exisiting ST desktop configuration files to set resolution(keep user settings)
        !           263: */
        !           264: void VDI_ModifyDesktopInf(char *pszFileName)
        !           265: {
        !           266:   long InfSize;
        !           267:   unsigned char *pInfData;
        !           268:   int i;
        !           269: 
        !           270:   // Load our '.inf' file
        !           271:   pInfData = (unsigned char *)File_Read(pszFileName,NULL,&InfSize,NULL);
        !           272:   if (pInfData) {
        !           273:     // Scan file for '#E'
        !           274:     i = 0;
        !           275:     while(i<(InfSize-8)) {
        !           276:       if ( (pInfData[i]=='#') && (pInfData[i+1]=='E') ) {
        !           277:         // Modify resolution
        !           278:         pInfData[i+7] = '1'+VDIRes;
        !           279:         goto done_modify;
        !           280:       }
        !           281: 
        !           282:       i++;
        !           283:     }
        !           284: 
        !           285: done_modify:;
        !           286:     /* And save */
        !           287:     File_Save(/*NULL,*/pszFileName,pInfData,InfSize,FALSE);
        !           288:     /* Free */
        !           289:     Memory_Free(pInfData);
        !           290:   }
        !           291: }
        !           292: 
        !           293: //-----------------------------------------------------------------------
        !           294: /*
        !           295:   Modify(or create) ST desktop configuration files so VDI boots up in correct colour depth
        !           296: */
        !           297: void VDI_FixDesktopInf(void)
        !           298: {
        !           299:   char szDesktopFileName[MAX_FILENAME_LENGTH],szNewDeskFileName[MAX_FILENAME_LENGTH];
        !           300: 
        !           301:   /* Create filenames for hard-drive */
        !           302:   GemDOS_CreateHardDriveFileName(2,"/desktop.inf",szDesktopFileName);
        !           303:   GemDOS_CreateHardDriveFileName(2,"/newdesk.inf",szNewDeskFileName);
        !           304: 
        !           305:   /* First, check if files exist(ie modify or replace) */
        !           306:   if (!File_Exists(szDesktopFileName))
        !           307:     VDI_SaveDesktopInf(szDesktopFileName,DesktopScript,sizeof(DesktopScript));
        !           308:   VDI_ModifyDesktopInf(szDesktopFileName);
        !           309: 
        !           310:   if (!File_Exists(szNewDeskFileName))
        !           311:     VDI_SaveDesktopInf(szNewDeskFileName,NewDeskScript,sizeof(NewDeskScript));
        !           312:   VDI_ModifyDesktopInf(szNewDeskFileName);
        !           313: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.