Hi! - getddt(0) and tmark are now macros. - (proposed by Lucho) play_dj() now says same words as MS-DOS.
--- Begin Message ---diff -ruNp old/kernel/dsk.c new/kernel/dsk.c --- old/kernel/dsk.c 2004-05-29 02:51:30.000000000 +0000 +++ new/kernel/dsk.c 2004-06-11 02:33:00.000000000 +0000 @@ -92,13 +92,12 @@ extern struct DynS ASM Dyn; /*TE - array access functions */ ddt *getddt(int dev) { - return &(((ddt *) Dyn.Buffer)[dev]); + return (ddt*)Dyn.Buffer + dev; } -STATIC VOID tmark(ddt *pddt) -{ - pddt->ddt_fh.ddt_lasttime = ReadPCClock(); -} +#define getddt0() ((ddt*)Dyn.Buffer) + +#define tmark(pddt) ((pddt)->ddt_fh.ddt_lasttime = ReadPCClock()) STATIC BOOL tdelay(ddt *pddt, ULONG ticks) { @@ -180,43 +179,40 @@ COUNT ASMCFUNC FAR blk_driver(rqptr rp) return ((*dispatch[rp->r_command]) (rp, getddt(rp->r_unit))); } -STATIC char template_string[] = "Remove diskette in drive X:\n"; -#define DRIVE_POS (sizeof(template_string) - 4) +STATIC char template_string[] = + "\nInsert diskette for drive :: and press any key when ready\n\n"; +/* 012345678901234567890123456^ */ +#define DRIVE_POS 27 STATIC WORD play_dj(ddt * pddt) { + UBYTE i; + ddt *pddt2; + + if ((pddt->ddt_descflags & (DF_MULTLOG | DF_CURLOG)) != DF_MULTLOG) + return M_NOT_CHANGED; + /* play the DJ ... */ - if ((pddt->ddt_descflags & (DF_MULTLOG | DF_CURLOG)) == DF_MULTLOG) + pddt2 = getddt0() - 1; + i = blk_dev.dh_name[0] + 1; + do { - int i; - ddt *pddt2 = getddt(0); - for (i = 0; i < blk_dev.dh_name[0]; i++, pddt2++) - { - if (pddt->ddt_driveno == pddt2->ddt_driveno && - (pddt2->ddt_descflags & (DF_MULTLOG | DF_CURLOG)) == - (DF_MULTLOG | DF_CURLOG)) - break; - } - if (i == blk_dev.dh_name[0]) + pddt2++, i--; + if (i == 0) { - put_string("Error in the DJ mechanism!\n"); /* should not happen! */ - } - else - { - template_string[DRIVE_POS] = 'A' + pddt2->ddt_logdriveno; - put_string(template_string); - put_string("Insert"); - template_string[DRIVE_POS] = 'A' + pddt->ddt_logdriveno; - put_string(template_string + 6); - put_string("Press the any key to continue ... \n"); - fl_readkey(); - pddt2->ddt_descflags &= ~DF_CURLOG; - pddt->ddt_descflags |= DF_CURLOG; - pokeb(0, 0x504, pddt->ddt_logdriveno); + put_string("Error in the DJ mechanism!\n"); /* should not happen! */ + return M_CHANGED; } - return M_CHANGED; - } - return M_NOT_CHANGED; + } while (pddt->ddt_driveno != pddt2->ddt_driveno || + (~pddt2->ddt_descflags & (DF_MULTLOG | DF_CURLOG))); + + template_string[DRIVE_POS] = 'A' + pddt->ddt_logdriveno; + put_string(template_string); + fl_readkey(); + pddt2->ddt_descflags &= ~DF_CURLOG; + pddt->ddt_descflags |= DF_CURLOG; + pokeb(0, 0x504, pddt->ddt_logdriveno); + return M_CHANGED; } STATIC WORD diskchange(ddt * pddt)
--- End Message ---
