Lab Assignment No: 06 Problem Statement

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 8

Lab Assignment No: 06

Problem statement: MOS implementation phase 1


NAME: Himanshu Dhar ROLLNO: 23

CLASS: SY BRANCH: IT BATCH: 1

DATE OF PERFORMANCE: 30 august 2020

#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<stdio.h>

using namespace std;
char M[100][4],IR[4],R[4],C;
FILE *fp1, *fp2;
int IC;
int B,E,SI,READf;

void TERMINATE();
void LOAD();
void STARTEXECUTION();
void EXECUTEPROGRAM();
void MOS(int);
void READ();
void WRITE();
void INIT()
{
    
    int i,j;
    for ( i = 0; i < 100; i++)
    {
        for (j = 0; j < 4; j++)
        {
            M[i][j] = '\0';// making all the elements of 2d array as nulle
        }
        
    }
     B = 0;
     E = B + 10;
     READf = 0;   
}
void READ(int loc)
{
    
    int i,j,k;
    char ch,arr1[20];
    if (READf == 0)
    {
        k = loc-1;
        E = loc+10;
        ch = fgetc(fp1);
        while (1)
        {
            i = 0;
            while (i < 4 && ch != '\n')
            {
                arr1[i] = ch;
                i++;
                ch = fgetc(fp1);
            }
            arr1[i] = '\0';
            if (strcmp(arr1,"$END")==0)
            {
                while (ch != '\0' && ch != EOF)
                    ch = fgetc(fp1);
                   break;
            }
            else 
            {
                if (ch == '\n')
                {
                k++;
                i=0;
                while (i < 4)
                {
                    M[k][i] = arr1[i];
                    i++;
                }
                k = E-1;
                E = E+10;   
                }
            else
            {
                k++;
                i=0;
                while (i < 4)
                {
                    M[k][i] = arr1[i];
                    i++;
                }    
            } 
            }  
            if (ch == '\n')
                ch = fgetc(fp1);
            
        }
      READf = 1;  

    }
    
}
void WRITE()
{
    
    int i,j,k,loc,x;
    char ch2;
    IR[3] = 0;
    x = atoi(&IR[2]);
    loc = x * 10;
    i = loc;
    while (i <= loc + 9)
    {
        for ( k = 0; k < 4; k++)
        {
            if (M[i][k] != '\0')
            {
                fputc(M[i][k], fp2);
                ch2 = M[i][k];
            }
            else
                break;   
        }
        i++;    
    }
    if (ch2 != '\n')
        fputc('\n',fp2);    
}
void MOS(int loc)
{
    
    switch (SI)
    {
    case 1:
        READ(loc);
        SI=0;
        break;
    case 2:
        WRITE();
        SI = 0;
        break;
    case 3:
        TERMINATE();
        SI = 0;
        break;
    default:
        break;
    }
}

void EXECUTEPROGRAM()
{
    
    int k,i,j,loc,x,y;
    while (IC<B)
    {
        for ( k = 0; k < 4; k++)
        {
            IR[k] = M[IC][k];
        }
        x = atoi(&IR[2]);
        loc = x;
        if (IR[0] == 'L' && IR[1] == 'R')
        {
            for ( i = 0; i < 4; i++)
                R[i] = '\0';
            for ( j = 0; j < 4; j++)
            {
                if (M[loc][j] != '\0' && M[loc][j] != '\n')
                {
                    R[j] = M[loc][j];
                }
                else
                {
                    break;
                }    
            }   
        }
        else if (IR[0] == 'S' && IR[1] == 'R')
        {
            for ( j = 0; j < 4 && R[j] != '\0'; j++)
            {
                M[loc][j] = R[j];
            }   
        }
        else if (IR[0] == 'C' && IR[1] == 'R')
        {
            for ( i = 0; i < 4; i++)
            {
                if (R[i] == M[loc][i])
                {
                    C = 't';
                }
                else
                {
                    C = 'f';
                    break;
                }    
            }   
        }
        else if (IR[0] == 'B' && IR[1] == 'T')
        {
            if (C == 't')
            {
                IC = loc;
                IC--;
            }   
        }
        else if (IR[0] == 'G' && IR[1] == 'D')
        {
            SI = 1;
            MOS(loc);
        }
        else if (IR[0] == 'P' && IR[1] == 'D')
        {
            SI = 2;
            MOS(loc);
        }
        else if (IR[0] == 'H')
        {
            SI = 3;
            MOS(loc);
        }
        IC++;   
    }    
}

void STARTEXECUTION()
{
    
    IC = 0;
    EXECUTEPROGRAM();
}

void LOAD()
{
    
    int i,j,k;
    char ch, temp[4];
    // ch = fgetc(fp1);
     int ch1 = fgetc(fp1);
    INIT();//INIT function is called that is made ABOVE
    
    do
    {
        i = 0;
        while (i<4 && (char)ch1 != '\n')
        {
            temp[i] = (char)ch1;
            ch = fgetc(fp1);
            ch1 = ch;
            i++;
        }
        
        temp[i] = '\0';
       //cout<<temp;
        if((strcmp(temp,"$AMJ"))==0)
        {
            while ((char)ch1 != '\n')
            {
                ch1 = getc(fp1);
            }
        }
        
        else if ((strcmp(temp,"$DTA"))==0)
        {
            STARTEXECUTION();
        }
        else if ((strcmp(temp,"$DTA"))!=0)
        {
            i=0;
            
            if (B == E)
            {E = E+10;}
            for ( k = 0; k < 4; k++)
            {
                M[B][k] = temp[i];
                i++;
            } 
            B++;   
        }
        
        if ((char)ch1 == '\n')
        ch1 = fgetc(fp1);
        
            
    } while (ch1 != EOF);   
}

void TERMINATE()
{
    
    fputc('\n', fp2);
    fputc('\n', fp2);
    
    LOAD();
}

int main()
{
    
    int i,j;
    fp1 = fopen("inputMOS.txt","r");
    fp2 = fopen("OUTPUTMOS.txt","w");
    if (fp1 == NULL)
    {
        cout<<"File not found";
    }
    else
    {
        LOAD();
    }
    cout<<"memory: "<<endl;
    for (int i = 20; i < 40; i++)
    {
        for(int j = 0; j < 4; j++)
            cout<<M[i][j]<<" ";
        cout<<endl; 
    }
    
    cout<<" press any button to continue"<<endl;
    
    
    
    getch();
    return 0 ;
}

Input:
$AMJ010200210001
GD30LR36SR40LR35SR41LR34SR42LR33SR43LR32
SR44LR31SR45LR30SR46LR39SR47SR38SR49PD40
H
$DTA
AMA PANANAL A CPLANN A A MA
$END0102
$AMJ020100120003
GD20LR20GD30CR33BT07GD40PD40PD20PD30GD40
PD40H
$DTA
HOPE FOR IT
THERE IS NO HOPE
BUT STILL HOPE
$END0201

Output:
A MAN A PLAN A CANAL PANAMA

You might also like