int hd_open(minor_t minor)
{
    devstatus_t dev_status = hd_getstatus(minor);
    if (dev_status == DEV_STATUS_NOT_FOUND) {
        errno = ENODEV;
        return EXIT_FAILURE;
    }
#ifdef DEBUG_HD_DRIVER 
    debug_printf("hd(%u,%u): status = %d\r\n", HARD_DISK_DRIVER, minor, dev_status);
#endif

    // reset disk
    if (dev_status == DEV_STATUS_UNKNOWN) {
#ifdef DEBUG_HD_DRIVER 
        debug_printf("hd(%u,%u): attempt to reset disk ", HARD_DISK_DRIVER, minor, dev_status);
#endif

        if (disk_reset(BIOS_HD_DRIVE_BASE_NB + minor) == EXIT_FAILURE) {
#ifdef DEBUG_HD_DRIVER 
            debug_printf("[NOK]\r\n");
#endif
            errno = ENODEV;
            return EXIT_FAILURE;
        }
        hd_setstatus(minor, DEV_STATUS_INITIALIZED);
#ifdef DEBUG_HD_DRIVER 
        debug_printf("[OK]\r\n");
#endif
    }

    // set info
    chs_disk_geometry_t* dev_info = (chs_disk_geometry_t*) hd_getinfo(minor);
    if (dev_info == NULL) {
#ifdef DEBUG_HD_DRIVER 
        debug_printf("hd(%u,%u): get disk geometry ", HARD_DISK_DRIVER, minor, dev_status);
#endif

        chs_disk_geometry_t* geometry = malloc(sizeof(chs_disk_geometry_t));
        assert(geometry != NULL);
        if (disk_geometry(BIOS_HD_DRIVE_BASE_NB + minor, geometry) == EXIT_FAILURE) {
#ifdef DEBUG_HD_DRIVER 
            debug_printf("[NOK]\r\n");
#endif
            free(geometry);
        } else {
#ifdef DEBUG_HD_DRIVER 
            debug_printf("[OK]\r\n");
#endif
            chs_disk_geometry_print(geometry);
            hd_setinfo(minor, geometry);
        }
    }

    return EXIT_SUCCESS;
}
Exemple #2
0
void OnUnMount(nwazetMessageContext_t* nmc){
  // Ensure that all files are closed before unmounting the file system
  CloseAllOpenFiles();
  // Unmount the file system
  uint8_t res = fsCheckSuccess(__func__, "f_mount(null)", f_mount(0, 0), 0);
  // low-level disk reset
  disk_reset();
  // Reset file object mappings
  fsCommandHandlerReset();
  // return a response to the caller
  StartResponse(nmc, res, true);
}
Exemple #3
0
int main(void)
{
	printstr("OK\n");
	if (init_video())
	{
		return(1);
	}

	printstr("    Resetting disk...");
	if (print_error(disk_reset(loader_setup.boot_drive), disk_errors, N_DISK_ERRORS, TRUE))
	{
		return(1);
	}

	printstr("    Getting disk info...");
	if (print_error(disk_info_standard(loader_setup.boot_drive,
									   &disk_geometry.cylinder,
									   &disk_geometry.head,
									   &disk_geometry.sector),
					 disk_errors, N_DISK_ERRORS, TRUE))
	{
		return(1);
	}

	printstr("...OK\n");

	printstr("Loading HIKernel (");
	putl(loader_setup.kernel_sectors, 10);
	printstr(" sectors)...\n");

	if (print_error(read_kernel(), disk_errors, N_DISK_ERRORS, TRUE))
	{
		return(1);
	}

	printstr("Killing floppy motor...\n");
	stop_floppy();

	printstr("Starting the BOSS...");

	engage();

	update_cursor();
	printstr("\nBack in the aMOS loader\n");
	printstr("Can't play that funky music, giving it up\n");
	printstr("Let down and hanging around\n");
	for (;;) {}

	return(0);
}
Exemple #4
0
void fsCommandHandlerReset(){
  PrintNeutralMessage("File system reset");

  // SD card state reset
  disk_reset();

  // Setup the file objects
  fileObject0.file = &file0;
  fileObject0.filenameHash = 0;
  fileObject0.id = INVALID_OBJECT_ID;

  fileObject1.file = &file1;
  fileObject1.filenameHash = 0;
  fileObject1.id = INVALID_OBJECT_ID;

  fileObject2.file = &file2;
  fileObject2.filenameHash = 0;
  fileObject2.id = INVALID_OBJECT_ID;

  fileObject3.file = &file3;
  fileObject3.filenameHash = 0;
  fileObject3.id = INVALID_OBJECT_ID;

  fileObject4.file = &file4;
  fileObject4.filenameHash = 0;
  fileObject4.id = INVALID_OBJECT_ID;

  // Setup the directory objects
  dirObject0.dir = &dir0;
  dirObject0.dirnameHash = 0;
  dirObject0.id = INVALID_OBJECT_ID;

  dirObject1.dir = &dir1;
  dirObject1.dirnameHash = 0;
  dirObject1.id = INVALID_OBJECT_ID;

  dirObject2.dir = &dir2;
  dirObject2.dirnameHash = 0;
  dirObject2.id = INVALID_OBJECT_ID;

  dirObject3.dir = &dir3;
  dirObject3.dirnameHash = 0;
  dirObject3.id = INVALID_OBJECT_ID;

  dirObject4.dir = &dir4;
  dirObject4.dirnameHash = 0;
  dirObject4.id = INVALID_OBJECT_ID;

  PrintSuccessMessage("File system reset ok");
}
Exemple #5
0
void CloseMGroup(int force)
{
    char    fin[PATH_MAX], fout[PATH_MAX];
    FILE    *fi, *fo;
    st_list *mgr = NULL, *tmp;

    free(gedgrps);
    snprintf(fin,  PATH_MAX, "%s/etc/mgroups.data", getenv("MBSE_ROOT"));
    snprintf(fout, PATH_MAX, "%s/etc/mgroups.temp", getenv("MBSE_ROOT"));

    if (MGrpUpdated == 1) {
	if (force || (yes_no((char *)"Database is changed, save changes") == 1)) {
	    working(1, 0, 0);
	    fi = fopen(fout, "r");
	    fo = fopen(fin,  "w");
	    fread(&mgrouphdr, mgrouphdr.hdrsize, 1, fi);
	    fwrite(&mgrouphdr, mgrouphdr.hdrsize, 1, fo);

	    while (fread(&mgroup, mgrouphdr.recsize, 1, fi) == 1)
		if (!mgroup.Deleted)
		    fill_stlist(&mgr, mgroup.Name, ftell(fi) - mgrouphdr.recsize);
	    sort_stlist(&mgr);

	    for (tmp = mgr; tmp; tmp = tmp->next) {
	        fseek(fi, tmp->pos, SEEK_SET);
	        fread(&mgroup, mgrouphdr.recsize, 1, fi);
	        fwrite(&mgroup, mgrouphdr.recsize, 1, fo);
	    }

	    tidy_stlist(&mgr);
	    fclose(fi);
	    fclose(fo);
	    unlink(fout);
	    chmod(fin, 0660);
	    disk_reset();
	    Syslog('+', "Updated \"mgroups.data\"");
	    if (!force)
	        working(6, 0, 0);
	    exp_golded = TRUE;
	    return;
	}
    }
    chmod(fin, 0660);
    working(1, 0, 0);
    unlink(fout); 
}
Exemple #6
0
void CloseMagics(int force)
{
	char	fin[PATH_MAX], fout[PATH_MAX];
	FILE	*fi, *fo;
	st_list	*mag = NULL, *tmp;

	snprintf(fin,  PATH_MAX, "%s/etc/magic.data", getenv("FTND_ROOT"));
	snprintf(fout, PATH_MAX, "%s/etc/magic.temp", getenv("FTND_ROOT"));

	if (MagicUpdated == 1) {
		if (force || (yes_no((char *)"Database is changed, save changes") == 1)) {
			working(1, 0, 0);
			fi = fopen(fout, "r");
			fo = fopen(fin,  "w");
			fread(&magichdr, magichdr.hdrsize, 1, fi);
			fwrite(&magichdr, magichdr.hdrsize, 1, fo);

			while (fread(&magic, magichdr.recsize, 1, fi) == 1)
				if (!magic.Deleted)
					fill_stlist(&mag, magic.Mask, ftell(fi) - magichdr.recsize);
			sort_stlist(&mag);

			for (tmp = mag; tmp; tmp = tmp->next) {
				fseek(fi, tmp->pos, SEEK_SET);
				fread(&magic, magichdr.recsize, 1, fi);
				fwrite(&magic, magichdr.recsize, 1, fo);
			}

			fclose(fi);
			fclose(fo);
			tidy_stlist(&mag);
			unlink(fout);
			chmod(fin, 0640);
			disk_reset();
			Syslog('+', "Updated \"magic.data\"");
			if (!force)
			    working(6, 0, 0);
			return;
		}
	}
	chmod(fin, 0640);
	working(1, 0, 0);
	unlink(fout); 
}
Exemple #7
0
void CloseHatch(int force)
{
	char	fin[PATH_MAX], fout[PATH_MAX];
	FILE	*fi, *fo;
	st_list	*hat = NULL, *tmp;

	snprintf(fin,  PATH_MAX, "%s/etc/hatch.data", getenv("MBSE_ROOT"));
	snprintf(fout, PATH_MAX, "%s/etc/hatch.temp", getenv("MBSE_ROOT"));

	if (HatchUpdated == 1) {
		if (force || (yes_no((char *)"Database is changed, save changes") == 1)) {
			working(1, 0, 0);
			fi = fopen(fout, "r");
			fo = fopen(fin,  "w");
			fread(&hatchhdr, hatchhdr.hdrsize, 1, fi);
			fwrite(&hatchhdr, hatchhdr.hdrsize, 1, fo);

			while (fread(&hatch, hatchhdr.recsize, 1, fi) == 1)
				if (!hatch.Deleted)
					fill_stlist(&hat, hatch.Spec, ftell(fi) - hatchhdr.recsize);
			sort_stlist(&hat);

			for (tmp = hat; tmp; tmp = tmp->next) {
				fseek(fi, tmp->pos, SEEK_SET);
				fread(&hatch, hatchhdr.recsize, 1, fi);
				fwrite(&hatch, hatchhdr.recsize, 1, fo);
			}

			tidy_stlist(&hat);
			fclose(fi);
			fclose(fo);
			unlink(fout);
			chmod(fin, 0640);
			disk_reset();
			Syslog('+', "Updated \"hatch.data\"");
			if (!force)
			    working(6, 0, 0);
			return;
		}
	}
	chmod(fin, 0640);
	working(1, 0, 0);
	unlink(fout); 
}
Exemple #8
0
char *exe_cmd(char *in)
{
    static char	obuf[SS_BUFSIZE];
    static char	ibuf[SS_BUFSIZE];
    static char	cmd[4];
    static char	token[SS_BUFSIZE];
    static char	ebuf[19];
    static char	var1[16];
    int		result;
    char	*buf;

    strncpy(ibuf, in, SS_BUFSIZE);
    strncpy(cmd, ibuf, 4);
    strncpy(ebuf, "200:1,Syntax error;", 19);

    /*
     * Split the commandline after the colon so we can give the
     * options directly to the actual functions. Also set a default
     * and most used answer.
     */
    strncpy(token, &ibuf[5], SS_BUFSIZE);
    strncpy(obuf, "100:0;", SS_BUFSIZE);


    /*
     * The A(counting) commands.
     *
     *  AINI:5,pid,tty,user,program,city;
     *  100:1,linenr;
     *  200:1,Syntax Error;
     */
    if (strncmp(cmd, "AINI", 4) == 0) {
        if ((result = reg_newcon(token)) != -1) {
            snprintf(obuf, SS_BUFSIZE, "100:1,%d;", result);
            return obuf;
        } else {
            stat_inc_serr();
            return ebuf;
        }
    }

    /*
     *  ACLO:1,pid;
     *  107:0;
     *  200:1,Syntax Error;
     */
    if (strncmp(cmd ,"ACLO", 4) == 0) {
        if (reg_closecon(token) == 0) {
            strcpy(obuf, "107:0;");
            return obuf;
        } else {
            stat_inc_serr();
            return ebuf;
        }
    }

    /*
     *  ADOI:2,pid,doing;
     *  100:0;
     *  200:1,Syntax Error;
     */
    if (strncmp(cmd, "ADOI", 4) == 0) {
        if (reg_doing(token) == 0)
            return obuf;
        else {
            stat_inc_serr();
            return ebuf;
        }
    }

    /*
     *  ATCP:1,pid;
     *  100:0;
     *  200:1,Syntax Error;
     */
    if (strncmp(cmd, "ATCP", 4) == 0) {
        if (reg_ip(token) == 0)
            return obuf;
        else {
            stat_inc_serr();
            return ebuf;
        }
    }

    /*
     *  ATTY:2,pid,tty;
     *  100:0;
     *  200:1,Syntax Error;
     */
    if (strncmp(cmd, "ATTY", 4) == 0) {
        if (reg_tty(token) == 0)
            return obuf;
        else {
            stat_inc_serr();
            return ebuf;
        }
    }

    /*
     *  ALOG:5,file,program,pid,grade,text;
     *  100:0;
     *  201:1,errno;
     */
    if (strncmp(cmd, "ALOG", 4) == 0) {
        if (userlog(token) != 0)
            snprintf(obuf, SS_BUFSIZE, "201:1,%d;", oserr);
        return obuf;
    }

    /*
     *  AUSR:3,pid,user,city;
     *  100:0;
     *  200:1,Syntax Error;
     */
    if (strncmp(cmd, "AUSR", 4) == 0) {
        if (reg_user(token) == 0)
            return obuf;
        else {
            stat_inc_serr();
            return ebuf;
        }
    }

    /*
     *  ADIS:2,pid,flag; (set Do Not Disturb).
     *  100:0;
     *  200:1,Syntax Error;
     */
    if (strncmp(cmd, "ADIS", 4) == 0) {
        if (reg_silent(token) == 0)
            return obuf;
        else {
            stat_inc_serr();
            return ebuf;
        }
    }

    /*
     *  ATIM:2,pid,seconds;
     *  100:0;
     *  200:1,Syntax Error;
     */
    if (strncmp(cmd, "ATIM", 4) == 0) {
        if (reg_timer(TRUE, token) == 0)
            return obuf;
        else {
            stat_inc_serr();
            return ebuf;
        }
    }

    /*
     *  ADEF:1,pid;
     *  100:0;
     */
    if (strncmp(cmd, "ADEF", 4) == 0) {
        if (reg_timer(FALSE, token) == 0)
            return obuf;
        else {
            stat_inc_serr();
            return ebuf;
        }
    }

    /*
     *  Check for personal message
     *
     *  CIPM:1,pid;  (Is personal message present)
     *  100:2,fromname,message;
     *  100:0;
     */
    if (strncmp(cmd, "CIPM", 4) == 0) {
        buf = calloc(SS_BUFSIZE, sizeof(char));
        reg_ipm_r(token, buf);
        snprintf(obuf, SS_BUFSIZE, "%s", buf);
        free(buf);
        return obuf;
    }

    /*
     * CSPM:3,fromuser,touser,text; (Send personal message).
     * 100:1,n;  n: 1=donotdisturb 2=buffer full 3=error
     * 100:0;
     */
    if (strncmp(cmd, "CSPM", 4) == 0) {
        if ((result = reg_spm(token)))
            snprintf(obuf, SS_BUFSIZE, "100:1,%d;", result);
        return obuf;
    }

    /*
     * CSYS:2,pid,1;    Sysop available for chat (from mbmon)
     * CSYS:2,pid,0;    Sysop goes away (from mbmon)
     * 100:0;		Allways Ok.
     */
    if (strncmp(cmd, "CSYS", 4) == 0) {
        reg_sysop(token);
        return obuf;
    }

    /*
     * CPAG:2,pid,reason;   Page sysop for a chat
     * 100:1,n;		    1=busy, 2=sysop not available, 3=error
     * 100:0;		    Ok
     */
    if (strncmp(cmd, "CPAG", 4) == 0) {
        if ((result = reg_page(token))) {
            snprintf(obuf, SS_BUFSIZE, "100:1,%d;", result);
        }
        return obuf;
    }

    /*
     * CCAN:1,pid;	    Cancel sysop page
     * 100:0;		    Always Ok
     */
    if (strncmp(cmd, "CCAN", 4) == 0) {
        reg_cancel(token);
        return obuf;
    }

    /*
     * Check for sysop page (from mbmon)
     *
     * CCKP:0;
     * 100:3,pid,1,reason;  Page is active
     * 100:3,pid,0,reason;  Page is canceled, but user still online
     * 100:0;		    No page active
     */
    if (strncmp(cmd, "CCKP", 4) == 0) {
        buf = calloc(SS_BUFSIZE, sizeof(char));
        reg_checkpage_r(token, buf);
        snprintf(obuf, SS_BUFSIZE, "%s", buf);
        free(buf);
        return obuf;
    }

    /*
     * Check for sysop in chatmode for forced sysop chat
     *
     * CISC:1,pid;
     * 100:1,1;		    Yes (and drop into chatmode)
     * 100:1,0;		    No
     */
    if (strncmp(cmd, "CISC", 4) == 0) {
        buf = calloc(SS_BUFSIZE, sizeof(char));
        chat_checksysop_r(token, buf);
        snprintf(obuf, SS_BUFSIZE, "%s", buf);
        free(buf);
        return obuf;
    }

    /*
     * Connect to chatserver
     *
     * CCON:4,pid,username,unixname,n;	Connect to chatserver with username, n=1 user is the sysop
     * 100:1,error;		If error
     * 100:0;			Ok
     */
    if (strncmp(cmd, "CCON", 4) == 0) {
        buf = calloc(SS_BUFSIZE, sizeof(char));
        chat_connect_r(token, buf);
        snprintf(obuf, SS_BUFSIZE, "%s", buf);
        free(buf);
        return obuf;
    }

    /*
     * Close chat session
     *
     * CCLO:1,pid;	    Leave chatserver
     * 100:1,error;	    Error
     * 100:0;		    Ok
     */
    if (strncmp(cmd, "CCLO", 4) == 0) {
        buf = calloc(SS_BUFSIZE, sizeof(char));
        chat_close_r(token, buf);
        snprintf(obuf, SS_BUFSIZE, "%s", buf);
        free(buf);
        return obuf;
    }

    /*
     * Put message on server
     *
     * CPUT:2,pid,message;  Put message on server
     * 100:2,0,error;	    Error, not fatal and continue chat
     * 100:2,1,error;	    Error, fatal and disconnect
     * 100:0;		    Ok
     */
    if (strncmp(cmd, "CPUT", 4) == 0) {
        buf = calloc(SS_BUFSIZE, sizeof(char));
        chat_put_r(token, buf);
        strncpy(obuf, buf, SS_BUFSIZE);
        free(buf);
        return obuf;
    }

    /*
     * Get message from server
     *
     * CGET:1,pid;	    Get message from server
     * 100:2,0,message;	    If message present
     * 100:2,1,error;	    Error and disconnect
     * 100:0;		    No message
     */
    if (strncmp(cmd, "CGET", 4) == 0) {
        buf = calloc(SS_BUFSIZE, sizeof(char));
        chat_get_r(token, buf);
        strncpy(obuf, buf, SS_BUFSIZE);
        free(buf);
        return obuf;
    }

    /*
     * The D(isk) commands.
     */

    /*
     *  DRES:0;             Reset and reread disk tables.
     *  100:0;		    Always Ok.
     */
    if (strncmp(cmd, "DRES", 4) == 0) {
        return disk_reset();
    }

    /*
     *  DSPC:1,n;           Check free space in MBytes
     *  100:2,0,n;          No, n = lowest size in MBytes
     *  100:2,1,n;          Yes, n = lowest size in MBytes
     *  100:1,2;            Unknown
     *  100:1,3;            Error
     */
    if (strncmp(cmd, "DSPC", 4) == 0) {
        buf = calloc(SS_BUFSIZE, sizeof(char));
        disk_check_r(token, buf);
        snprintf(obuf, SS_BUFSIZE, "%s", buf);
        free(buf);
        return obuf;
    }

    /*
     *  DGFS:0;		    Get filesystem status.
     *  100:n,data1,..,data10;
     */
    if (strncmp(cmd, "DGFS", 4) == 0) {
        buf = calloc(SS_BUFSIZE, sizeof(char));
        disk_getfs_r(buf);
        snprintf(obuf, SS_BUFSIZE, "%s", buf);
        free(buf);
        return obuf;
    }

    /*
     * The G(lobal) commands.
     *
     *  GNOP:1,pid;
     *  100:0;
     */
    if (strncmp(cmd ,"GNOP", 4) == 0) {
        reg_nop(token);
        return obuf;
    }

    /*
     *  GPNG:n,data;
     *  100:n,data;
     */
    if (strncmp(cmd, "GPNG", 4) == 0) {
        snprintf(obuf, SS_BUFSIZE, "100:%s", token);
        return obuf;
    }

    /*
     *  GVER:0;
     *  100:1,Version ...;
     */
    if (strncmp(cmd, "GVER", 4) == 0) {
        snprintf(obuf, SS_BUFSIZE, "100:1,Version %s;", VERSION);
        return obuf;
    }

    /*
     *  GSTA:0;
     *  100:19,start,laststart,daily,startups,clients,tot_clients,tot_peak,tot_syntax,tot_comerr,
     *         today_clients,today_peak,today_syntax,today_comerr,!BBSopen,ZMH,internet,Processing,Load,sequence;
     *  201:1,16;
     */
    if (strncmp(cmd, "GSTA", 4) == 0) {
        buf = calloc(SS_BUFSIZE, sizeof(char));
        stat_status_r(buf);
        snprintf(obuf, SS_BUFSIZE, "%s", buf);
        free(buf);
        return obuf;
    }

    /*
     *  GMON:1,n;  n=1 First time
     *  100:7,pid,tty,user,program,city,isdoing,starttime;
     *  100:0;
     */
    if (strncmp(cmd, "GMON", 4) == 0) {
        strtok(token, ",");
        strcpy(var1, strtok(NULL, ";"));
        buf = calloc(SS_BUFSIZE, sizeof(char));
        get_reginfo_r(atoi(var1), buf);
        snprintf(obuf, SS_BUFSIZE, "%s", buf);
        free(buf);
        return obuf;
    }

    /*
     *  GSYS:0;
     *  100:7,calls,pots_calls,isdn_calls,network_calls,local_calls,startdate,last_caller;
     *  201:1,16;
     */
    if (strncmp(cmd, "GSYS", 4) == 0) {
        buf = calloc(SS_BUFSIZE, sizeof(char));
        get_sysinfo_r(buf);
        snprintf(obuf, SS_BUFSIZE, "%s", buf);
        free(buf);
        return obuf;
    }

    /*
     *  GLCC:0;
     *  100:1,n;
     */
    if (strncmp(cmd, "GLCC", 4) == 0) {
        buf = calloc(SS_BUFSIZE, sizeof(char));
        get_lastcallercount_r(buf);
        snprintf(obuf, SS_BUFSIZE, "%s", buf);
        free(buf);
        return obuf;
    }

    /*
     *  GLCR:1,recno;
     *  100:9,user,location,level,device,time,mins,calls,speed,actions;
     *  201:1,16;
     */
    if (strncmp(cmd, "GLCR", 4) == 0) {
        strtok(token, ",");
        strcpy(var1, strtok(NULL, ";"));
        buf = calloc(SS_BUFSIZE, sizeof(char));
        get_lastcallerrec_r(atoi(var1), buf);
        snprintf(obuf, SS_BUFSIZE, "%s", buf);
        free(buf);
        return obuf;
    }


    /*
     * The (M)IB commands, SNMP counters.
     */

    /*
     * MIB Set Mailer Session
     *
     * MSMS:6,kbrcvd,kbsent,direction,state,freqs;
     * 100:0;
     *
     * kbrcvd	  Kbytes received
     * kbsent	  KBytes sent
     * direction  0=inbount, 1=outbound
     * state	  0=secure, 1=unsecure, 2=bad session
     * type	  0=unknown, 1=ftsc, 2=yoohoo, 3=emsi, 4=binkp
     * freqs	  nr of file requests
     */
    if (strncmp(cmd, "MSMS", 4) == 0) {
        mib_set_mailer(token);
        return obuf;
    }

    /*
     * MIB Get Mailer Session
     *
     * MGMS:0;
     * 100:12,kbrcvd,kbsent,sessin,sessout,sess_sec,sess_unseq,sess_bad,ftsc,yoohoo,emsi,binkp,freqs;
     */
    if (strncmp(cmd, "MGMS", 4) == 0) {
        buf = calloc(SS_BUFSIZE, sizeof(char));
        mib_get_mailer_r(buf);
        snprintf(obuf, SS_BUFSIZE, "%s", buf);
        free(buf);
        return obuf;
    }

    /*
     * MIB Set Tosser Netmail
     *
     * MSTN:3,in,out,bad;
     * 100:0;
     */
    if (strncmp(cmd, "MSTN", 4) == 0) {
        mib_set_netmail(token);
        return obuf;
    }

    /*
     * MIB Get Tosser Netmail
     *
     * MGTN:0;
     * 100:3,in,out,bad;
     */
    if (strncmp(cmd, "MGTN", 4) == 0) {
        buf = calloc(SS_BUFSIZE, sizeof(char));
        mib_get_netmail_r(buf);
        snprintf(obuf, SS_BUFSIZE, "%s", buf);
        free(buf);
        return obuf;
    }

    /*
     * MIB Set Tosser Internet-email
     *
     * MSTI:3,in,out,bad;
     * 100:0;
     */
    if (strncmp(cmd, "MSTI", 4) == 0) {
        mib_set_email(token);
        return obuf;
    }

    /*
     * MIB Get Tosser Internet-email
     *
     * MGTI:0;
     * 100:3,in,out,bad;
     */
    if (strncmp(cmd, "MGTI", 4) == 0) {
        buf = calloc(SS_BUFSIZE, sizeof(char));
        mib_get_email_r(buf);
        snprintf(obuf, SS_BUFSIZE, "%s", buf);
        free(buf);
        return obuf;
    }

    /*
     * MIB Set Tosser Echomail
     *
     * MSTE:4,in,out,bad,dupe;
     * 100:0;
     */
    if (strncmp(cmd, "MSTE", 4) == 0) {
        mib_set_echo(token);
        return obuf;
    }

    /*
     * MIB Get Tosser Echomail
     *
     * MGTE:0;
     * 100:4,in,out,bad,dupe;
     */
    if (strncmp(cmd, "MGTE", 4) == 0) {
        buf = calloc(SS_BUFSIZE, sizeof(char));
        mib_get_echo_r(buf);
        snprintf(obuf, SS_BUFSIZE, "%s", buf);
        free(buf);
        return obuf;
    }

    /*
     * MIB Set Tosser RFC-news
     *
     * MSTR:4,in,out,bad,dupe;
     * 100:0;
     */
    if (strncmp(cmd, "MSTR", 4) == 0) {
        mib_set_news(token);
        return obuf;
    }

    /*
     * MIB Get Tosser RFC-news
     *
     * MGTR:0;
     * 100:4,in,out,bad,dupe;
     */
    if (strncmp(cmd, "MGTR", 4) == 0) {
        buf = calloc(SS_BUFSIZE, sizeof(char));
        mib_get_news_r(buf);
        snprintf(obuf, SS_BUFSIZE, "%s", buf);
        free(buf);
        return obuf;
    }

    /*
     * MIB Get Tosser Totals
     *
     * MGTT:0;
     * 100:4,in,out,bad,dupe;
     */
    if (strncmp(cmd, "MGTT", 4) == 0) {
        buf = calloc(SS_BUFSIZE, sizeof(char));
        mib_get_tosser_r(buf);
        snprintf(obuf, SS_BUFSIZE, "%s", buf);
        free(buf);
        return obuf;
    }

    /*
     * MIB Set Tosser Files
     *
     * MSFF:6,in,out,bad,dupe,magics,hatched;
     * 100:0;
     */
    if (strncmp(cmd, "MSTF", 4) == 0) {
        mib_set_files(token);
        return obuf;
    }

    /*
     * MIB Get Tosser Files
     *
     * MGFF:0;
     * 100:6,in,out,bad,dupe,magics,hatched;
     */
    if (strncmp(cmd, "MGTF", 4) == 0) {
        buf = calloc(SS_BUFSIZE, sizeof(char));
        mib_get_files_r(buf);
        snprintf(obuf, SS_BUFSIZE, "%s", buf);
        free(buf);
        return obuf;
    }

    /*
     * MIB Set BBS
     *
     * MSBB:9,sessions,minutes,posted,uploads,kbupload,downloads,kbdownload,chats,chatminutes;
     * 100:0;
     */
    if (strncmp(cmd, "MSBB", 4) == 0) {
        mib_set_bbs(token);
        return obuf;
    }

    /*
     * MIB Get BBS
     *
     * MGBB:0;
     * 100:9,sessions,minutes,posted,uploads,kbupload,downloads,kbdownload,chats,chatminutes;
     */
    if (strncmp(cmd, "MGBB", 4) == 0) {
        buf = calloc(SS_BUFSIZE, sizeof(char));
        mib_get_bbs_r(buf);
        snprintf(obuf, SS_BUFSIZE, "%s", buf);
        free(buf);
        return obuf;
    }

    /*
     * MIB Get Outbound Size
     *
     * MGOB:0;
     * 100:1,size;
     */
    if (strncmp(cmd, "MGOB", 4) == 0) {
        buf = calloc(SS_BUFSIZE, sizeof(char));
        mib_get_outsize_r(buf);
        snprintf(obuf, SS_BUFSIZE, "%s", buf);
        free(buf);
        return obuf;
    }

    /*
     * The (S)tatus commands.
     *
     *  SBBS:0;
     *  100:2,n,status message;
     */
    if (strncmp(cmd, "SBBS", 4) == 0) {
        switch(stat_bbs_stat()) {
        case 0:
            snprintf(obuf, SS_BUFSIZE, "100:2,0,The system is open for use;");
            break;
        case 1:
            snprintf(obuf, SS_BUFSIZE, "100:2,1,The system is closed right now!;");
            break;
        case 2:
            snprintf(obuf, SS_BUFSIZE, "100:2,2,The system is closed for Zone Mail Hour!;");
            break;
        }
        return obuf;
    }

    /*
     *  SOPE:0;
     *  100:0;
     */
    if (strncmp(cmd, "SOPE", 4) == 0) {
        stat_set_open(1);
        return obuf;
    }

    /*
     *  SCLO:0;
     *  100:0;
     */
    if (strncmp(cmd, "SCLO", 4) == 0) {
        stat_set_open(0);
        return obuf;
    }

    /*
     *  SFRE:0;
     *  100:1,Running utilities: n  Active users: n;
     *  100:0;
     *  201:1,16;
     */
    if (strncmp(cmd, "SFRE", 4) == 0) {
        buf = calloc(SS_BUFSIZE, sizeof(char));
        reg_fre_r(buf);
        snprintf(obuf, SS_BUFSIZE, "%s", buf);
        free(buf);
        return obuf;
    }

    /*
     *  SSEQ:0;
     *  100:1,number;
     *  200:1,16;
     */
    if (strncmp(cmd, "SSEQ", 4) == 0) {
        buf = calloc(SS_BUFSIZE, sizeof(char));
        getseq_r(buf);
        snprintf(obuf, SS_BUFSIZE, "%s", buf);
        free(buf);
        return obuf;
    }

    /*
     *  SEST:1,semafore;   Get status of semafore
     *  100:1,n;           1 = set, 0 = not set
     *  200:1,16;
     */
    if (strncmp(cmd, "SEST", 4) == 0) {
        buf = calloc(SS_BUFSIZE, sizeof(char));
        sem_status_r(token, buf);
        snprintf(obuf, SS_BUFSIZE, "%s", buf);
        free(buf);
        return obuf;
    }

    /*
     *  SECR:1,semafore;   Set semafore
     *  100:0;
     *  200:1,16;
     */
    if (strncmp(cmd, "SECR", 4) == 0) {
        buf = calloc(SS_BUFSIZE, sizeof(char));
        sem_create_r(token, buf);
        snprintf(obuf, SS_BUFSIZE, "%s", buf);
        free(buf);
        return obuf;
    }

    /*
     *  SERM:1,semafore;   Remove semafore
     *  100:0;
     *  200:1,16;
     */
    if (strncmp(cmd, "SERM", 4) == 0) {
        buf = calloc(SS_BUFSIZE, sizeof(char));
        sem_remove_r(token, buf);
        snprintf(obuf, SS_BUFSIZE, "%s", buf);
        free(buf);
        return obuf;
    }


    /*
     * If we got this far, there must be an error.
     */
    stat_inc_serr();
    Syslog('!', "Comm systax error: \"%s:%s\"", cmd, printable(token, 0));
    return ebuf;
}
Exemple #9
0
Fichier : DF.C Projet : FDOS/defrag
int main(int argc, char **argv)
{
int fd,i;
char *buffer;
size_t bufsz;
int tracks,sectors,heads;

#if defined __WATCOMC__ || defined __GNUC__
    setvbuf(stdout,NULL,_IONBF,0);      /* flush stdout every printf */
#endif

    Reset = 0;
    Zero = 0;
    Keep = 0;
    Last = 0;
    Verify = 0;
    MaxTrack = MaxHead = -1;
    Bytes = 0;
    Disk = File = ToDisk = -1;
    SysOnly = 0;
    NoAsk = 0;

    options(argc,argv);

    if ((i = disk_get_physical(Disk,&tracks,&sectors,&heads)) != DISK_OK)
        die("BIOS error: ",disk_error(i),0);

    if ((buffer = malloc(bufsz = sectors * 512)) == NULL)
        die("Not enough memory found!"," (%u)",bufsz);

    printf("\n");

    if (Reset)
    {
        printf("Reseting controller...");
        disk_reset(Disk);
        printf(" Homing disk...");
        if ((i = disk_read_p(Disk,0,1,0,buffer,1)) != DISK_OK)
            die("BIOS error: ",disk_error(i),0);
        printf(" OK.\n");
    }

    printf("Drive %c: has %u tracks and %u sides.\n",Disk+'A',tracks+1,heads+1);

    if (Last)
        setlast(Disk,&MaxTrack,&MaxHead,0);

    if (SysOnly)
        setlast(Disk,&MaxTrack,&MaxHead,1);

    if (ToDisk == 1)
        printf("\nWrite file \"%s\" to disk in %c:",argv[File],Disk+'A');
    else
        printf("\nWrite disk in %c: to file \"%s\"",Disk+'A',argv[File]);

    if (!NoAsk && ask(NULL) == 0)
        return 1;

    if (ToDisk == 2)                                     /* writing file */
    {
        if ((fd = _open(argv[File],_O_RDONLY)) != -1)
        {
            _close(fd);
            printf("File \"%s\" exists",argv[File]);
            if (ask("; overwrite?") == 0)
                return 1;
        }
        fd = _open(argv[File],O_CREAT|O_RDWR|O_BINARY|O_TRUNC,S_IREAD|S_IWRITE);
    }
    else
    {
        fd = _open(argv[File],O_RDWR|O_BINARY);
    }

    if (fd == -1)
        die("file error: ",strerror(errno),errno);

    errno = 0;

    putchar('\n');

    /* on error we get back here with setjmp() returning non-zero */

    if (setjmp(Jmpbuf) == 0)
    {
        /* now that everything is verified and prepared, this is the meat */

        if (ToDisk == 1)
            i = file2disk(fd,Disk,tracks,heads,sectors,bufsz,buffer);
        else
            i = disk2file(fd,Disk,tracks,heads,sectors,bufsz,buffer);

        if (i == DISK_OK)
            printf("\nDone.            \n");

        /* that's not hard is it... */
    }
    else
    {
        puts("\n\nStopped.             \n");
        getch();    /* eat key from kbhit() */
    }

    _close(fd);

#ifdef _WIN32
    if (i)
#else
    if ((i = disk_status(Disk)) != 0)
#endif
        die("BIOS error: ",disk_error(i),0);

    if (errno)
        die("File error: ",strerror(errno),errno);

    if (Reset)
    {
        printf("\nReseting controller...");
        disk_reset(Disk);
        printf(" Homing disk...\n");
        disk_read_p(Disk,0,1,0,buffer,1);
    }

    printf("\n%ld bytes written\n",Bytes);

    return 0;

}