2 #include "dos.h" /* AN000 */
3 #include "fdisk.h" /* AN000 */
4 #include "extern.h" /* AN000 */
5 #include "subtype.h" /* AN000 */
6 #include "fdiskmsg.h" /* AN000 */
7 #include "string.h" /* AN000 */
8 #include "ctype.h" /* AN000 */
9 #include "stdio.h" /* AN000 */
12 /******************* START OF SPECIFICATIONS *******************/
14 /* SUBROUTINE NAME: DELETE_PARTITION */
16 /* DESCRIPTIVE NAME: Delete partition selection menu */
18 /* FUNCTION: User is prompted as to what type of DOS partition */
19 /* he wishes to delete. */
21 /* NOTES: The delete volume option is only displayed if some */
22 /* disk volumes exist */
24 /* The following screen is managed */
26 /* ³0000000000111111111122222222223333333333³ */
27 /* ³0123456789012345678901234567890123456789³ */
28 /* ÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ */
33 /* 04³Delete DOS Partition ³ */
35 /* 06³Current Fixed Disk Drive: # ³ */
37 /* 08³Enter the type of DOS partition you ³ */
38 /* 09³wish to delete..............? ³ */
40 /* 11³ 1. Normal DOS partition ³ */
41 /* 12³ 2. EXTENDED DOS Partition ³ */
42 /* 13³ 3. Disk volume in the EXTENDED ³ */
43 /* 14³ DOS Partition ³ */
47 /* 18³Enter choice: [#] ³ */
52 /* 23³Press ESC to return to FDISK Options ³ */
53 /* ÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ */
55 /* ENTRY POINTS: Delete_Partition */
56 /* LINKAGE: delete_partition() */
61 /* EXIT-NORMAL: ERROR=FALSE */
63 /* EXIT-ERROR: ERROR=TRUE */
64 /* GOTO internal_program_error if case statement */
65 /* failure when branching to requested function */
67 /* EFFECTS: No data directly modified by this routine, but */
68 /* child routines will modify data. */
70 /* INTERNAL REFERENCES: */
75 /* internal_program_error */
80 /* EXTERNAL REFERENCES: */
83 /******************** END OF SPECIFICATIONS ********************/
86 void delete_partition()
96 input = c(NUL); /* AC000 */
98 clear_screen(u(0),u(0),u(24),u(79)); /* AC000 */
103 /* Setup and print current disk */
104 insert[0] = cur_disk+1+'0';
107 /* print ESC prompt */
110 /* check to see if there is an avail partition */
111 temp = c(0); /* AC000 */
112 for (i = u(0); i < u(4);i++) /* AC000 */
115 /* See if any non - zero system id bytes */
116 temp = temp | part_table[cur_disk][i].sys_id ;
118 /* Any entry that isn't zero means */
119 if (temp != c(0)) /* AC000 */
121 /* ############# ADD CODE HERE FOR THIS FUNCTION ############## */
122 /* Do something about defaults and highlighting */
124 /* ############################################################ */
126 /* Display enter prompts */
127 /* display dos delete menu without input prompt */
133 display(menu_27); /* AC000 */
134 max_input = c(3); /* AC000 */
136 input = get_num_input(c(NUL),max_input,input_row,input_col); /* AC000 */
137 /* Go branch to the requested function */
141 if (find_partition_type(uc(DOS12)) || /* AN016 AC016 */
142 find_partition_type(uc(DOS16)) || /* AN016 AC016 */
143 find_partition_type(uc(DOSNEW))) /* AN016 AC016 */
147 /* No Pri partition to delete */
148 clear_screen(u(17),u(0),u(17),u(79)); /* AN000 */
149 display(error_6); /* AN000 */
150 wait_for_ESC(); /* AN000 */
155 if (find_partition_type(uc(EXTENDED))) /* AN000 */
159 /* No Ext partition to delete */
160 clear_screen(u(17),u(0),u(17),u(79)); /* AN000 */
161 display(error_7); /* AN000 */
162 wait_for_ESC(); /* AN000 */
167 if ((find_partition_type(uc(EXTENDED))) && (find_logical_drive())) /* AC000 */
171 clear_screen(u(17),u(0),u(17),u(79)); /* AN000 */
172 display(error_36); /* AN000 */
173 wait_for_ESC(); /* AN000 */
179 default : internal_program_error();
188 /* clear the screen before going back to main menu */
189 clear_screen(u(0),u(0),u(24),u(79)); /* AC000 */
195 /******************* START OF SPECIFICATIONS *******************/
197 /* SUBROUTINE NAME: DOS_DELETE */
199 /* DESCRIPTIVE NAME: Delete DOS partition */
201 /* FUNCTION: Delete the DOS partition. Prompt user with dire */
202 /* warning first. Default entry on prompt is (N) */
204 /* NOTES: Screen can be exited via the ESC command before */
205 /* partition is deleted and nothing will change */
207 /* The following screen is managed */
209 /* ³0000000000111111111122222222223333333333³ */
210 /* ³0123456789012345678901234567890123456789³ */
211 /* ÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ */
216 /* 04³Delete DOS Partition ³ */
218 /* 06³Current Fixed Disk Drive: # ³ */
220 /* 08³Partition Status Type Start End Size³ */
221 /* 09³ # # ####### #### #### ####³ */
226 /* 14³Total disk space is #### cylinders. ³ */
230 /* 18³Warning! Data in the DOS partition ³ */
231 /* 19³will be lost. Do you wish to ³ */
232 /* 20³continue..........................? [N] ³ */
235 /* 23³Press ESC to return to FDISK Options ³ */
236 /* ÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ */
238 /* ENTRY POINTS: DOS_Delete */
239 /* LINKAGE: dos_delete */
244 /* EXIT-NORMAL: ERROR=FALSE */
246 /* EXIT-ERROR: ERROR=TRUE */
247 /* GOTO internal_program_error if invalid input */
248 /* returned to this level */
250 /* EFFECTS: No data directly modified by this routine, but */
251 /* child routines will modify data. */
253 /* INTERNAL REFERENCES: */
260 /* Write_Boot_Record */
261 /* find_part_free_space */
263 /* EXTERNAL REFERENCES: */
266 /******************** END OF SPECIFICATIONS ********************/
277 input = c(NUL); /* AC000 */
279 clear_screen(u(0),u(0),u(24),u(79)); /* AC000 */
284 /* Setup and print current disk */
285 insert[0] = cur_disk+1+'0';
288 /* print ESC prompt */
291 /* Display partition data and double check if partition exists*/
295 sprintf(insert,"%4.0d",total_mbytes[cur_disk]);
298 /* See if drive 1 and extended partition exists */
300 if (!(find_partition_type(uc(EXTENDED)) && (cur_disk == c(0)))) /* AC000 */
303 /* Nope, we can keep going */
304 /* Display Y/N prompt */
307 /* Get yes/no prompt */
308 input = get_yn_input(c(No),input_row,input_col); /* AC000 AC011 */
313 for (i=u(0); i < u(4); i++) /* AC000 */
316 if ( (part_table[cur_disk][i].sys_id==uc(DOS12)) ||
317 (part_table[cur_disk][i].sys_id==uc(DOS16)) ||
318 (part_table[cur_disk][i].sys_id==uc(DOSNEW)) ) /* AC000 */
321 /* Set Partition entry to zero */
322 part_table[cur_disk][i].boot_ind = uc(0); /* AC000 */
323 part_table[cur_disk][i].start_head = uc(0); /* AC000 */
324 part_table[cur_disk][i].start_sector = uc(0); /* AC000 */
325 part_table[cur_disk][i].start_cyl = u(0); /* AC000 */
326 part_table[cur_disk][i].sys_id = uc(0); /* AC000 */
327 part_table[cur_disk][i].end_head = uc(0); /* AC000 */
328 part_table[cur_disk][i].end_sector = uc(0); /* AC000 */
329 part_table[cur_disk][i].end_cyl = u(0); /* AC000 */
330 part_table[cur_disk][i].rel_sec = ul(0); /* AC000 */
331 part_table[cur_disk][i].num_sec = ul(0); /* AC000 */
332 part_table[cur_disk][i].changed = (FLAG)TRUE; /* AC000 */
333 part_table[cur_disk][i].mbytes_used = f(0); /* AN000 */
334 part_table[cur_disk][i].percent_used = u(0); /* AN000 */
336 strcpy(part_table[cur_disk][i].system,c(NUL)); /* AN000 */
337 strcpy(part_table[cur_disk][i].vol_label,c(NUL)); /* AN000 */
339 /* Redisplay the partition info */
342 /* clear the prompt off */
343 clear_screen(u(16),u(0),u(23),u(79)); /* AC000 */
345 /* Set the reboot flag */
346 reboot_flag = (FLAG)TRUE; /* AC000 */
348 /* Say that you deleted it */
358 case 0: break; /* AC000 */
364 internal_program_error();
371 /* Tell user he can't do it while extended exists on drive 1 */
379 internal_program_error();
381 clear_screen(u(0),u(0),u(24),u(79)); /* AC000 */
387 /******************* START OF SPECIFICATIONS *******************/
389 /* SUBROUTINE NAME: EXT_DELETE */
391 /* DESCRIPTIVE NAME: Delete EXTENDED DOS partition */
393 /* FUNCTION: Delete the EXTENDED DOS partition. Prompt with */
394 /* warning first. Default entry on prompt is (N) */
396 /* NOTES: Screen can be exited via the ESC command before */
397 /* partition is deleted and nothing will change */
399 /* The following screen is managed */
401 /* ³0000000000111111111122222222223333333333³ */
402 /* ³0123456789012345678901234567890123456789³ */
403 /* ÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ */
408 /* 04³Delete EXTENDED DOS Partition ³ */
410 /* 06³Current Fixed Disk Drive: # ³ */
412 /* 08³Partition Status Type Start End Size³ */
413 /* 09³ # # ####### #### #### ####³ */
418 /* 14³Total disk space is #### cylinders. ³ */
422 /* 18³Warning! Data in the EXTENDED DOS ³ */
423 /* 19³partition will be lost. Do you wish ³ */
424 /* 20³to continue.......................? [N] ³ */
427 /* 23³Press ESC to return to FDISK Options ³ */
428 /* ÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ */
430 /* ENTRY POINTS: Ext_Delete */
431 /* LINKAGE: ext_delete () */
436 /* EXIT-NORMAL: ERROR=FALSE */
438 /* EXIT-ERROR: ERROR=TRUE */
439 /* GOTO internal_program_error if invalid input */
440 /* returned to this routine */
442 /* EFFECTS: No data directly modified by this routine, but */
443 /* child routines will modify data. */
445 /* INTERNAL REFERENCES: */
452 /* Write_Boot_Record */
453 /* Internal_Program_Error */
454 /* Find_Free_Space */
456 /* EXTERNAL REFERENCES: */
459 /******************** END OF SPECIFICATIONS ********************/
469 unsigned j; /* AN000 */
472 input = c(NUL); /* AC000 */
473 /* Clear the screen */
474 clear_screen(u(0),u(0),u(24),u(79)); /* AC000 */
479 /* Setup and print current disk */
480 insert[0] = cur_disk+1+'0';
483 /* print ESC prompt */
486 /* Display partition data and double check if partition exists*/
487 table_display(); /* AC000 */
488 sprintf(insert,"%4.0d",total_mbytes[cur_disk]);
492 /* See if there are still volumes */
493 if (!find_logical_drive())
495 /* Display Y/N prompt */
498 /* Get yes/no prompt */
499 input = get_yn_input(c(No),input_row,input_col); /* AC000 AC011 */
504 for (i=u(0); i < u(4); i++) /* AC000 */
505 /* Note: This will delete all occurances of EXTENDED DOS partitions found */
507 if (part_table[cur_disk][i].sys_id == uc(EXTENDED)) /* AC000 */
509 /* Set Partition entry to zero */
510 part_table[cur_disk][i].boot_ind = uc(0); /* AC000 */
511 part_table[cur_disk][i].start_head = uc(0); /* AC000 */
512 part_table[cur_disk][i].start_sector = uc(0); /* AC000 */
513 part_table[cur_disk][i].start_cyl = u(0); /* AC000 */
514 part_table[cur_disk][i].sys_id = uc(0); /* AC000 */
515 part_table[cur_disk][i].end_head = uc(0); /* AC000 */
516 part_table[cur_disk][i].end_sector = uc(0); /* AC000 */
517 part_table[cur_disk][i].end_cyl = u(0); /* AC000 */
518 part_table[cur_disk][i].rel_sec = ul(0); /* AC000 */
519 part_table[cur_disk][i].num_sec = ul(0); /* AC000 */
520 part_table[cur_disk][i].changed = (FLAG)TRUE; /* AC000 */
521 part_table[cur_disk][i].mbytes_used = f(0); /* AN000 */
522 part_table[cur_disk][i].percent_used = u(0); /* AN000 */
524 strcpy(part_table[cur_disk][i].system,c(NUL)); /* AN000 */
525 strcpy(part_table[cur_disk][i].vol_label,c(NUL)); /* AN000 */
527 /* Redisplay the partition info */
530 /* clear the prompt off */
531 clear_screen(u(17),u(0),u(23),u(79)); /* AC000 */
533 /* Say that you deleted it */
536 /* Set the reboot flag */
537 reboot_flag = (FLAG)TRUE; /* AC000 */
544 case 0: break; /* AC000 */
548 default: internal_program_error();
554 /* Logical drives still exist, can't delete partition */
559 clear_screen(u(0),u(0),u(24),u(79)); /* AC000 */
565 /******************* START OF SPECIFICATIONS *******************/
567 /* SUBROUTINE NAME: VOL_DELETE */
569 /* DESCRIPTIVE NAME: Delete DOS disk Volume */
571 /* FUNCTION: Prompts user to delete a DOS disk volume */
573 /* NOTES: Screen can be exited via the ESC command before */
574 /* partition is deleted and nothing will change */
576 /* The following screen is managed */
578 /* ³0000000000111111111122222222223333333333³ */
579 /* ³0123456789012345678901234567890123456789³ */
580 /* ÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ */
581 /* 00³Delete DOS Disk Volume ³ */
583 /* 02³Vol Start End Size ³ */
584 /* 03³ # #### #### #### ³ */
597 /* 16³Total partition size is #### cylinders. ³ */
599 /* 18³Warning! Data in the DOS disk volume ³ */
600 /* 19³will be lost. What volume do you wish ³ */
601 /* 20³to delete.........................? [#] ³ */
603 /* 22³Are you sure......................? [N] ³ */
604 /* 23³Press ESC to return to FDISK Options ³ */
605 /* ÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ */
607 /* ENTRY POINTS: Vol_Delete */
608 /* LINKAGE: vol_delete () */
613 /* EXIT-NORMAL: ERROR=FALSE */
615 /* EXIT-ERROR: ERROR=TRUE */
616 /* GOTO internal_program_error if invalid input */
617 /* returned to this routine */
619 /* EFFECTS: No data directly modified by this routine, but */
620 /* child routines will modify data. */
622 /* INTERNAL REFERENCES: */
630 /* Write_Boot_Record */
631 /* Find_Free_Space */
632 /* Internal_Program_Error */
634 /* EXTERNAL REFERENCES: */
637 /******************** END OF SPECIFICATIONS ********************/
648 char error_low_drive;
649 char error_high_drive;
650 char drives_reassigned;
656 unsigned char drive_list[23][2];
662 unsigned char drive_temp;
664 unsigned char string_input[12]; /* AN000 */
667 string_input[0] = uc(NUL); /* AN000 */
670 clear_screen(u(0),u(0),u(24),u(79)); /* AC000 */
675 /* print ESC prompt */
678 /* Display logical drives and get the highest drive letter assigned*/
679 high_drive = volume_display();
681 /* Get the first avail drive letter to be deleted */
682 low_drive = (high_drive - get_num_logical_dos_drives()+1);
685 /* Initialize array of drive letters that exist at this point */
686 for (i=(int)0; i < (int)23; i++) /* AC000 */
688 /* See if we've exceeded the drive letter range */
689 if (temp <= high_drive)
691 /* Put in drive letter */
692 drive_list[i][0] = ((unsigned char)(temp));
693 /* Initialize the offsets into the array to something harmless */
694 drive_list[i][1] = uc(INVALID); /* AC000 */
698 /* No drive there, put in NUL */
699 drive_list[i][0] = uc(NUL); /* AC000 */
700 drive_list[i][1] = uc(INVALID); /* AC000 */
703 /* Check for next drive */
707 /* Set up partition size message */
708 sprintf(insert,"%4.0d",get_partition_size( uc(EXTENDED) ) );
711 /* Assume no drives deleted */
712 drives_reassigned = (FLAG)FALSE; /* AC000 */
714 /* Loop until ESC or all deleted */
715 while (input != c(ESC)) /* AC000 */
718 /* Are there any drives left?*/
719 drives_exist = (FLAG)FALSE; /* AC000 */
720 error_low_drive = ((char)(NUL));
721 error_high_drive = ((char)(NUL));
723 for (i=(int)0;i < (int)23; i++) /* AC000 */
725 drive_temp = drive_list[i][0];
726 if ((drive_temp != uc(NUL)) && (drive_list[i][1] != uc(DELETED))) /* AC011 */
728 drives_exist = (FLAG)TRUE; /* AC000 */
730 /* Find last existing drive letter */
731 error_high_drive = ((char)(drive_temp));
733 /* See if we've found the first drive yet */
734 if (error_low_drive == ((char)(NUL)))
735 error_low_drive = ((char)(drive_temp));
739 /* If there are drives, go let user try to delete them */
743 /* Get input until given a correct drive */
744 valid_input = (FLAG)FALSE; /* AC000 */
745 while ( (!valid_input) && (input != c(ESC)) )
748 /* Prompt for input */
751 /* Get input between first and highest drive letters */
752 clear_screen( u(21), u(0), u(21), u(79) );
753 input = get_alpha_input(low_drive,high_drive,input_row,input_col,error_low_drive,error_high_drive);
756 /* See if it has been deleted already or ESC pressed */
757 drives_exist = FALSE;
758 for (i=(int)0;i < (int)23; i++) /* AC000 */
760 if (drive_list[i][0] == ((unsigned char)(drive_input)) &&
761 (drive_list[i][1] != ((unsigned char) DELETED))) /* AC013 */
766 if (ext_table[cur_disk][i].drive_letter == c(drive_input) )
771 /* Input volume string to confirm delete */
777 /* delete privious volume mismatch message */
778 string_input[0] = uc(NUL); /* AN000 */
779 clear_screen( u(22), u(0), u(23), u(79) );
780 /* Get input volume label */
781 display(menu_41); /* AN000 */
782 get_string_input(input_row,input_col,string_input); /* AN000 */
783 if (string_input[0] == uc(ESC)) input = c(ESC);
785 /* See if the volume id matches the selected drive */ /* AN000 */
786 if (strcmp(ext_table[cur_disk][point].vol_label,string_input) == (int)ZERO)
787 vol_matches = TRUE; /* AN000 */
788 else if (input != c(ESC)) display(error_34);
792 /* Tell user the drive has already been deleted */
793 insert[0] = dos_upper(drive_input); /* AC000 */
794 insert[1] = c(DRIVE_INDICATOR); /* AC000 */
795 clear_screen( u(21), u(0), u(22), u(79) ); /* AN000 */
801 /* If it is a valid drive indicate that the input was ok */
802 if ( (input != c(ESC)) && (drives_exist) && (vol_matches) ) /* AC000 */
806 /* At this point we have a valid drive letter to delete */
808 /* Get the offset into the array for the drive to be deleted */
809 delete_drive = find_ext_drive(drive_input - low_drive);
811 /* Got a drive letter - prompt are you sure */
814 /* Get Y/N input, default is NO */
815 input = get_yn_input(c(No),input_row,input_col); /* AC000 AC011 */
817 /* Clear everything out on screen in prompt area */
818 clear_screen(u(23),u(0),u(23),u(79)); /* AC000 */
820 /* Go handle the delete */
825 /* Go ahead and mark it deleted in list array */
827 /* Throw up a flag to indicate we need to delete this one for real later */
828 /* This is because if we change the ext_table array now, we lose the ability */
829 /* to match up drive letters with locations, or at least it become more */
830 /* complicated than I felt like figuring out, so mark it now and do it later */
831 drive_list[list_index][1] = (unsigned char)DELETED; /* AC011 */
833 drives_reassigned = TRUE;
835 /* Put prompt up on screen */
836 for (i=(int)0; i < (int)23; i++) /* AC000 */
838 /* See if drive deleted */
839 if (drive_list[i][1] == uc(DELETED)) /* AC011 */
841 /* Wipe out the drive info and print deleted message */
842 /* See what column it is in */
843 if (i < (int)12) /* AC000 */
845 column = (int)4; /* AC000 */
846 row = (int)(4 + i - (int)0);
847 clear_screen( (unsigned)row, (unsigned)column,
848 (unsigned)row, (unsigned)39 );
852 column = (int)45; /* AC000 */
853 row = (int)(4 + i - (int)12);
854 clear_screen( (unsigned)row, (unsigned)column,
855 (unsigned)row, (unsigned)79 );
858 /* Put the start row,col of message in the message string */
861 *s++ = ((char)(row/10))+'0';
862 *s++ = ((char)(row%10))+'0';
863 *s++ = ((char)(column/10))+'0';
864 *s = ((char)(column%10))+'0';
868 /* Set the reboot flag */
870 clear_screen( u(21), u(0), u(23), u(79) ); /* AN000 */
876 clear_screen( u(21), u(0), u(23), u(79) ); /* AN000 */
880 internal_program_error();
886 else /* drives do not exist! */
888 /* No more logical drives to delete */
889 clear_screen(u(16),u(0),u(21),u(79)); /* AC000 */
891 input = wait_for_ESC();
893 END /* while input != esc */
895 if (drives_reassigned)
897 /* If anything got deleted, lets go do it for real */
898 for (i=(int)0; i < (int)23;i++) /* AC000 */
900 if (drive_list[i][1] == uc(DELETED)) /* AC011 */
902 for (j=(int)0; j < (int)23;j++) /* AN011 */
904 if (drive_list[i][0] == ext_table[cur_disk][j].drive_letter) /* AN011 */
906 /* Zero sys id and show it changed */
907 ext_table[cur_disk][j].boot_ind = uc(0); /* AC000 */
908 ext_table[cur_disk][j].start_head = uc(0); /* AC000 */
909 ext_table[cur_disk][j].start_sector = uc(0); /* AC000 */
910 ext_table[cur_disk][j].start_cyl = u(0); /* AC000 */
911 ext_table[cur_disk][j].sys_id = uc(0); /* AC000 */
912 ext_table[cur_disk][j].end_head = uc(0); /* AC000 */
913 ext_table[cur_disk][j].end_sector = uc(0); /* AC000 */
914 ext_table[cur_disk][j].end_cyl = u(0); /* AC000 */
915 ext_table[cur_disk][j].rel_sec = ul(0); /* AC000 */
916 ext_table[cur_disk][j].num_sec = ul(0); /* AC000 */
917 ext_table[cur_disk][j].mbytes_used = f(0); /* AN000 */
918 ext_table[cur_disk][j].percent_used = u(0); /* AN000 */
919 ext_table[cur_disk][j].changed = TRUE; /* AN000 */
920 ext_table[cur_disk][j].drive_letter = NUL; /* AN000 */
921 strcpy(ext_table[cur_disk][j].system,c(NUL)); /* AN000 */
922 strcpy(ext_table[cur_disk][j].vol_label,c(NUL)); /* AN000 */
928 /* Show new drive letters */
931 /* Say that drive letters changed */
932 clear_screen(u(16),u(0),u(23),u(79)); /* AC000 */
936 clear_screen(u(0),u(0),u(24),u(79)); /* AC000 */