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

Reply via email to