PPRIIORITY.C
/* CPU scheduling : Priority algo. - Non premptive ................... */
// jobQ maintained as ascending order priority Q (1st job-highest priority)
#include<stdlib.h>
#include<stdio.h>
#define newnode (struct node *)malloc(sizeof(struct node))
struct node
{ int jobno,time,proty; // priority
struct node *next;
}*JOBQ=NULL;
int job=0;
void erase()
{ struct node *S;
while(JOBQ!=NULL) { S=JOBQ; JOBQ=JOBQ->next; free(S); }
job=0;
}
struct node *Append(struct node *F)
{ struct node *s,*t,*s1=NULL;
t=newnode; t->next=NULL;
t->jobno=++job; t->time=0;
do // validation check for job time
{ printf("\nJOB %d - CPU burst : ",job);
fflush(stdin); scanf("%d",&t->time);
if(t->time<=0) printf("\nJob time should be > 0");
}while(t->time<=0);
do // validation check for priority range 1-5
{ printf("\t Priority : ",job);
fflush(stdin); scanf("%d",&t->proty);
if(t->proty<1 || t->proty >5) printf("\nPriority range is 1(H) to 5(L) ");
}while(t->proty<1 || t->proty >5);
if(F==NULL) F=t; // JOBQ empty, so this is 1st job
else // priority wise insert (acsending oreder priority)
{ for(s=F; s!=NULL; s1=s, s=s->next) // find position
{ if(t->proty < s->proty) break;
}
t->next=s; // insert before s
if(s1==NULL) F=t; // added before 1st node
else s1->next=t; // inbetween position
}
return F;
}
void CreateJOBQ()
{ struct node *S; int i,n;
printf("\nHow many jobs? "); scanf("%d",&n);
if(n<=0) { printf("\nError : No. of Jobs should be > 0."); return; }
if(JOBQ!=NULL) erase(JOBQ);
for(i=1;i<=n;i++) JOBQ=Append(JOBQ);
}
void DisplayJOBQ() // sorted on priority
{struct node *T;
if(JOBQ==NULL) printf("\nJOB Q is Empty!");
else
{ printf("\n JOB Time Priority");
for(T=JOBQ;T!=NULL;T=T->next) printf("\n J%d : %3d %4d",T->jobno,T->time,T->proty);
}
}
void delFstNode() // deletes 1st job(highest priority) from JOBQ
{struct node *t;
t=JOBQ; JOBQ=JOBQ->next;
free(t);
}
void ExecuteJOBQ() // Shortest Job First
{ struct node *T,*S=NULL,*t1; int time=0; char choice;
if(JOBQ==NULL) { printf("\nJOB Q is Empty!"); return; }
printf("\nclock CPU JOBQ ");
printf("\n%3d -idle-",time);
for(T=JOBQ; T!=NULL; T=T->next) printf(" J%d(%d) ",T->jobno,T->time); // print JOBQ
while(JOBQ!=NULL)
{
printf("\n%3d J%d(%d) |--",time,JOBQ->jobno,JOBQ->time); // cpu allocated
time+=JOBQ->time; // increment clock
delFstNode(); // job finished
for(T=JOBQ; T!=NULL; T=T->next) printf(" J%d(%d:%d) ",T->jobno,T->proty,T->time); // print JOBQ
printf(" --| Add New Job(y/n)? "); choice=getche();
if(choice=='y' || choice=='Y') JOBQ=Append(JOBQ);
}
printf("\n%3d -idle-",time);
}
char menu()
{ char choice='a';
clrscr();
printf("\n< Priority : NonPreemptive > ");
printf("\nC: Create \nD: Display \nE: Execute \nX: exit");
printf("\nEnter your choice : "); choice=getche();
return toupper(choice);
}
void main()
{
while(1)
{ switch(menu())
{ case 'X' : erase(); exit(0); // release memory allocated to JOBQ
case 'C' : CreateJOBQ(); break;
case 'D' : DisplayJOBQ(); break;
case 'E' : ExecuteJOBQ(); break;
default : printf("\7 Invalid Choice!");
}
printf("\npress any key to continue..."); getch();
}
}
ASMB2.C
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
struct symtab
{
char name[10];
int used,declared,addr,length,value;
}s[10];
int symtab_cnt;
int check_if_valid_opode(char tok[]);
int search_into_symtab(char *st)
{
int i;
for(i=0;i<symtab_cnt;i++)
if(strcmpi(st,s[i].name)==0)
return i;
return -1;
}
char optab[][10]={"stop","add","sub","mult","mover","movem","comp","bc",
"div","read","print"};
char regtab[][6]={"areg,","breg,","creg,","dreg,"};
char oprtab[][6]={"le,","lt,","eq,","gt,","ge,","any,"};
char adtab[][6]={"start","end","ltorg","origin"};
int optab_cnt=11;
int regtab_cnt=4;
int oprtab_cnt=6;
int adtab_cnt=4;
void display()
{
int m;
for(m=0;m<symtab_cnt;m++)
if(s[m].used == 1 && s[m].declared == 0)
printf("\nSymb %s used but not defined",s[m].name);
else if(s[m].used == 0 && s[m].declared == 1)
printf("\nSymb %s defined but not used",s[m].name);
getch();
}
main(int argc,char *argv[])
{
FILE *fp;
char *w[4],*error[15];
char str[80],line[80];
int notok,i,p=0,k,j,cnt=0,h;
clrscr();
fp=fopen(argv[1],"r");
if(fp==NULL)
{
printf("\nFile can not be opened...");
getch();
exit(1);
}
for(i=0;i<4;i++) //Allocating memory to token variables
w[i]=(char *)malloc(10);
cnt=0;
while(fgets(str,80,fp))
{
cnt++;
printf("%d : %s",cnt,str);
notok=sscanf(str,"%s%s%s%s",w[0],w[1],w[2],w[3]);
switch(notok)
{
case 2:k=check_if_valid_opcode(w[0]);
if(k==9||k==10)
{
h=search_into_symtab(w[1]);
if(h==-1)
{
strcpy(s[symtab_cnt].name,w[1]);
s[symtab_cnt++].used=1;
}
continue;
}
break;
case 3:k=check_if_valid_opcode(w[0]);.
if(k>=1&&k<=8)
{
h=search_into_symtab(w[2]);
if(h==-1)
{
strcpy(s[symtab_cnt].name,w[2]);
s[symtab_cnt++].used=1;
}
continue;
}
if(strcmpi(w[1],"ds")==0 || strcmpi(w[1],"dc")==0)
{
h=search_into_symtab(w[0]);
if(h==-1)
{
strcpy(s[symtab_cnt].name,w[0]);
s[symtab_cnt++].declared=1;
}
else
{
if(s[h].declared==0)
{
s[h].declared=1;
}
else
printf("Multiple declaration");
}
}
break;
case 4:h=search_into_symtab(w[0]);
if(h==-1)
{
strcpy(s[symtab_cnt].name,w[0]);
s[symtab_cnt++].declared=1;
}
break;
}
}
display();
getch();
}
int check_if_valid_opcode(char tok[])
{
int i;
for(i=0;i<optab_cnt;i++)
if((strcmpi(tok,optab[i]))==0)
return i;
return -1;
}