Ugh. remove all the -> 's ... struct keyword { char *name; int number; } int net_enabled = 1; struct keyword yes[] = { {"yes", 1}, {"y", 1}}; struct keyword netmaint_cmd[] = { {"disable", disable}, {"enable", enable}, {"status", status}, {"help", help}, {"quit", quit}, {"", 0}}; struct keyword diskmaint_cmd[] = { {"mount", mount}, {"dismount", dismount}, {"disklist", disklist}, {"unitlist", unitlist}, {"status", status}, {"format", format}, {"backup", backup}, {"restore", restore}, {"help", help}, {"quit", quit}, {"", 0}}; struct keyword disks[] = { {"netdsk0", 1}, {"netdsk1", 2}, {"drum0", 3}, {"drum1", 4}, {"floppy0", 5}, {"floppy1", 6}, {"fast0", 7}, {"fast1", 8}, {"dsk0", 9}, {"dsk1", 10}, {"dsk2", 11}, {"dsk3", 12}, {"dsk4", 13}, {"dsk5", 14}, {"dsk6", 15}, {"", 0}}; struct keyword units[] = { {"security", 1}, {"grades", 2}, {"source", 3}, {"artichoke", 4}, {"temporary", 5}, {"spool", 6}, {"swap", 7}, {"system", 8}, {"kernel", 9}, {"backup", 10}, {"user", 11}, {"documentation", 12}, {"utility", 13}, {"accounting", 14}, {"class", 15}, {"", 0}}; int mount_table[] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; enumerate(list) struct keyword *list[]; { while (**list.name != '\0') say(*list.name netmaint() { while (1) { switch (read(netmaint_cmds)) { case disable: if(!net_enabled) say("Network already disabled!\n"); else { say("Network disabled.\n"); net_enabled = 0; } break; case enable: if(net_enabled) say("Network already enabled!\n"); else { say("Network enabled.\n"); net_enabled = 1; } break; case status: if(!net_enabled) say("Cannot get network status. Network disabled.\n"); else { say("Network status:\n"); system("netstat"); } break; case help: say("Netmaint commands:\n"); enumerate(netmaint_cmds); break; case quit: say("Quitting netmaint.\n"); return; default: say("Invalid netmaint command.\n"); } } } find_unit(disk) int disk; { int unit = -1; for (i = 0; *units[i]->name != '\0'; i++) if (mount_table[i] == disk) unit = i; return(unit); } diskmaint() { while(1) { switch (read(diskmaint_cmds)) { case mount: say("Mount which disk?"); if ((disk = read(disks)) >= 0) { if ((unit = find_unit(disk)) >= 0) say("Disk %s is already mounted on unit %s.\n", disks[disk]->name, units[unit]->name); else { say("On which unit?"); if ((unit = read(units)) >= 0) { if (mount_table[unit] >=0) say("Disk %s is already mounted on unit %s.\n", disks[disk]->name, units[unit]->name); else { mount_table[unit] = disk; say("Disk %s is now mounted on unit %s.\n", disks[disk]->name, units[unit]->name); } } else say("Illegal unit.\n"); } } else { say("Illegal disk.\n"); } break; case dismount: say("Dismount which disk?"); if ((disk = read(disks)) >= 0) then { if ((unit = find_unit(disk)) >= 0) then { mount_table[unit] = -1; say("Disk %s dismounted from unit %s.\n",disks[disk]->name, units[disk_state[disk]]->name); } else say("Disk %s is not mounted.\n",disks[disk]->name); } else { say("Illegal disk.\n"); } break; case disklist: say("Disks online:\n"); enumerate(disks); break; case unitlist: say("Units configured:\n"); enumerase(units); break; case status: say("Unit status:\n"); for (unit=0; *units[unit]->name != '\0'; unit++) { say("Unit %s is ", units[unit]->name); if (mount_table[unit] >= 0) then say("mounted on disk %s.\n",disks[mount_table[unit]]->name); else say("not mounted.\n"); } break; case format: say("Format which disk?"); if ((disk = read(disks)) >= 0) then { if ((unit = find_unit(disk)) >= 0) then say("Cannot format disk %s because it is mounted on unit %s.\n", disks[disk]->name,units[unit]->name); else { say("This will destroy all data on disk %s! Are you sure?", disks[disk]->name); if(read(yes) >= 0) { say("Formatting..."); pause(10); say("Done.\n"); } else say("Format cancled.\n"); } } else say("Illegal disk."); break; case backup: say("Backup which disk?"); if ((disk = read(disks)) >= 0) then { say("Please mount the backup tape on the tape drive. Is it ready?"); if(read(yes) >= 0) { say("Backing up disk %s to tape...\n",disks[disk]->name); pause(5); say("Tape media error or no tape mounted.\n"); say("Backup aborted.\n") } else say("Backup cancled.\n"); } else say("Illegal disk.\n"); break; case restore: say("Restore which disk?"); if ((disk = read(disks)) >= 0) then { say("Please mount the backup tape on the tape drive. Is it ready?"); if(read(yes) >= 0) { say("Restoring disk %s from tape...\n",disks[disk]->name); pause(5); say("Tape media error or no tape mounted.\n"); say("Restore aborted.\n") } else say("Restore cancled.\n"); } else say("Illegal disk.\n"); break; case help: say("Diskmaint commands:\n"); enumerate(diskmaint_cmds); break; case quit: say("Quitting diskmaint.\n"); return; default: say("Invalid diskmaint command.\n"); } } }