⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 files_sequential.c

📁 Source code for an Numeric Cmputer
💻 C
字号:
/* Classic Ladder Project *//* Copyright (C) 2001 Marc Le Douarain *//* mavati@club-internet.fr *//* http://www.multimania.com/mavati/classicladder *//* November 2002 *//* Last update : 2 November 2002 *//* ------------------------------------------------------------------------------------- *//* Load/Save Sequential pages parameters *//* ------------------------------------------------------------------------------------- *//* This library is free software; you can redistribute it and/or *//* modify it under the terms of the GNU Lesser General Public *//* License as published by the Free Software Foundation; either *//* version 2.1 of the License, or (at your option) any later version. *//* This library is distributed in the hope that it will be useful, *//* but WITHOUT ANY WARRANTY; without even the implied warranty of *//* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU *//* Lesser General Public License for more details. *//* You should have received a copy of the GNU Lesser General Public *//* License along with this library; if not, write to the Free Software *//* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include "classicladder.h"#include "global.h"#include "files.h"#include "files_sequential.h"#ifdef debug#define dbg_printf printf#elsestatic inline int dbg_printf(char *f, ...){    return 0;}#endifchar ConvTypeOffsetVar(char *RawLine, int *VarType, int *VarOffset){    char *StartOfValue;    char *EndOfValue;    StartOfValue = RawLine;    EndOfValue = RawLine;    /* Extract Var Type */    StartOfValue = EndOfValue;    do {	EndOfValue++;    }    while (*EndOfValue != '/' && *EndOfValue != '\0');    *EndOfValue++ = '\0';    *VarType = atoi(StartOfValue);    /* Extract Var Offset in the type table */    StartOfValue = EndOfValue;    do {	EndOfValue++;    }    while (*EndOfValue != 10 && *EndOfValue != '\0');    *EndOfValue++ = '\0';    *VarOffset = atoi(StartOfValue);    return TRUE;}char LoadSequential(char *FileName){    FILE *File;    char Okay = FALSE;    char Line[300];    char *LineOk;    int NumStep, NumTransi, ScanStep;    StrStep *pStep;    StrTransition *pTransi;    int StepData[100];    int ScanData;    char *pSearch;    File = fopen(FileName, "rt");    if (File) {	do {	    LineOk = fgets(Line, 300, File);	    if (LineOk) {		switch (Line[0]) {		case ';':		    break;		case '#':		    if (strncmp(&Line[1], "VER=", 4) == 0) {			if (atoi(&Line[5]) > 1) {			    printf("Sequential version not supported...\n");			    LineOk = FALSE;			}		    }		    break;		case 'S':		    ConvRawLineOfNumbers(&Line[1], 6, StepData);		    NumStep = StepData[0];		    pStep = &Sequential->Step[NumStep];		    pStep->InitStep = StepData[1];		    pStep->StepNumber = StepData[2];		    pStep->NumPage = StepData[3];		    pStep->PosiX = StepData[4];		    pStep->PosiY = StepData[5];		    break;		case 'T':		    ConvRawLineOfNumbers(&Line[1],			1 + 4 * NBR_SWITCHS_MAX + 3, StepData);		    ScanData = 0;		    NumTransi = StepData[ScanData++];		    pTransi = &Sequential->Transition[NumTransi];		    for (ScanStep = 0; ScanStep < NBR_SWITCHS_MAX; ScanStep++)			pTransi->NumStepToActiv[ScanStep] =			    StepData[ScanData++];		    for (ScanStep = 0; ScanStep < NBR_SWITCHS_MAX; ScanStep++)			pTransi->NumStepToDesactiv[ScanStep] =			    StepData[ScanData++];		    for (ScanStep = 0; ScanStep < NBR_SWITCHS_MAX; ScanStep++)			pTransi->NumTransLinkedForStart[ScanStep] =			    StepData[ScanData++];		    for (ScanStep = 0; ScanStep < NBR_SWITCHS_MAX; ScanStep++)			pTransi->NumTransLinkedForEnd[ScanStep] =			    StepData[ScanData++];		    pTransi->NumPage = StepData[ScanData++];		    pTransi->PosiX = StepData[ScanData++];		    pTransi->PosiY = StepData[ScanData++];		    break;		case 'C':		    NumTransi = atoi(&Line[1]);		    pTransi = &Sequential->Transition[NumTransi];		    pSearch = Line;		    do {			pSearch++;		    }		    while (*pSearch != ',');		    pSearch++;		    pSearch++;		    pSearch++;		    ConvTypeOffsetVar(pSearch, &pTransi->VarTypeCondi,			&pTransi->VarNumCondi);		    break;		}	    }	}	while (LineOk);	fclose(File);	Okay = TRUE;    }    return (Okay);}void SaveArray(FILE * File, short int *pArray){    int ScanStep = 0;    do {//              if ( ScanStep>0 )//                      fprintf( File, "-" );	fprintf(File, "%d", pArray[ScanStep]);	fprintf(File, ",");	ScanStep++;    }    while (ScanStep < NBR_SWITCHS_MAX /* && pArray[ ScanStep ]!=-1 */ );//      fprintf( File, "," );}char SaveSequential(char *FileName){    FILE *File;    char Okay = FALSE;    int NumStep, NumTransi;    StrStep *pStep;    StrTransition *pTransi;    File = fopen(FileName, "wt");    if (File) {	fprintf(File, "; Sequential\n");	fprintf(File, "#VER=1.0\n");	for (NumStep = 0; NumStep < NBR_STEPS; NumStep++) {	    pStep = &Sequential->Step[NumStep];	    if (pStep->NumPage != (char) -1) {		fprintf(File, "S%d,%d,%d,%d,%d,%d", NumStep, pStep->InitStep,		    pStep->StepNumber, pStep->NumPage, pStep->PosiX,		    pStep->PosiY);		fprintf(File, "\n");	    }	}	for (NumTransi = 0; NumTransi < NBR_TRANSITIONS; NumTransi++) {	    pTransi = &Sequential->Transition[NumTransi];	    if (pTransi->NumPage != (char) -1) {		fprintf(File, "T%d,", NumTransi);		SaveArray(File, pTransi->NumStepToActiv);		SaveArray(File, pTransi->NumStepToDesactiv);		SaveArray(File, pTransi->NumTransLinkedForStart);		SaveArray(File, pTransi->NumTransLinkedForEnd);		fprintf(File, "%d,%d,%d", pTransi->NumPage, pTransi->PosiX,		    pTransi->PosiY);		fprintf(File, "\n");	    }	}	for (NumTransi = 0; NumTransi < NBR_TRANSITIONS; NumTransi++) {	    pTransi = &Sequential->Transition[NumTransi];	    if (pTransi->NumPage != (char) -1) {		fprintf(File, "C%d,0,%d/%d", NumTransi, pTransi->VarTypeCondi,		    pTransi->VarNumCondi);		fprintf(File, "\n");	    }	}	fclose(File);	Okay = TRUE;    }    return (Okay);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -