From 60261c73cdae774892f8a3e869e792fab5d8b5e2 Mon Sep 17 00:00:00 2001 From: Trevor Barnes Date: Sat, 18 Feb 2023 15:44:55 -0600 Subject: [PATCH] progress on desktop --- 00-WSLSetup/hello | Bin 0 -> 16880 bytes 01-StackMachine/stackm.c | 105 +++++++++++++++++++++----- 02-TeenyTinyShell/ttsh | Bin 0 -> 20384 bytes 02-TeenyTinyShell/ttsh.c | 9 +++ 02-TeenyTinyShell/ttsh.o | Bin 0 -> 8704 bytes 03-MatrixAddition (fork)/mat | 0 03-MatrixAddition (fork)/matAddFork.c | 81 ++++++++++++++++++++ 03-MatrixAddition (fork)/matRead.c | 16 ++++ CS3841.code-workspace | 12 +++ 9 files changed, 206 insertions(+), 17 deletions(-) create mode 100644 00-WSLSetup/hello create mode 100644 02-TeenyTinyShell/ttsh create mode 100644 02-TeenyTinyShell/ttsh.o create mode 100644 03-MatrixAddition (fork)/mat create mode 100644 03-MatrixAddition (fork)/matAddFork.c create mode 100644 03-MatrixAddition (fork)/matRead.c create mode 100644 CS3841.code-workspace diff --git a/00-WSLSetup/hello b/00-WSLSetup/hello new file mode 100644 index 0000000000000000000000000000000000000000..bfdb158e4c8998e9202c5cda82bdfae087a05ec3 GIT binary patch literal 16880 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 literal 0 HcmV?d00001 diff --git a/01-StackMachine/stackm.c b/01-StackMachine/stackm.c index 5d83178..8f9d57f 100644 --- a/01-StackMachine/stackm.c +++ b/01-StackMachine/stackm.c @@ -7,7 +7,7 @@ typedef struct node { int value; - struct node* next; + struct node *next; } node; typedef struct stackm { @@ -16,63 +16,134 @@ typedef struct stackm { void smInit(struct stackm *myStack){ - (myStack->top) = NULL; + myStack->top = NULL; } int smSize(struct stackm *myStack){ - while(myStack->top->next != NULL) { - + node *current = myStack->top; + int count = 0; + while(current != NULL) { + count++; + current = current->next; } - return myStack->top; + return count; } int smPush(struct stackm *myStack, int toStore){ - node node; - node.value = toStore; - - *(myStack->top->next) = node; + + node *newNode = (node *)malloc(sizeof(node)); + if (newNode == NULL) { + return 0; + } else { + newNode->value = toStore; + newNode->next = myStack->top; + myStack->top = newNode; + return 1; + } } int smPop(struct stackm *myStack){ - + if(myStack->top == NULL) { + return 0; + } + node *temp = myStack->top; + myStack->top = temp->next; + free(temp); + return 1; } int smTop(struct stackm *myStack, int* toStore){ - + if (myStack->top == NULL || toStore == NULL) { + return 0; + } else { + toStore = (int*)myStack->top; + return 1; + } } void smClear(struct stackm *myStack){ - + while (myStack->top != NULL) { + node *temp = myStack->top; + myStack->top = temp->next; + free(temp); + } } void smPrint(struct stackm *myStack){ - + node *temp = myStack->top; + printf("==Stack Contents==\n"); + printf("Top -> "); + while (temp != NULL) { + printf("%d ", temp->value); + temp = temp->next; + printf("\n"); + } } int smAdd(struct stackm* myStack){ - + if(smSize(myStack) <= 2){ + return 0; + } else { + int sum = (myStack->top->value) + (myStack->top->next->value); + smPush(myStack,sum); + return 1; + } } int smSub(struct stackm* myStack){ - + if(smSize(myStack) <= 2){ + return 0; + } else { + int result = (myStack->top->value) - (myStack->top->next->value); + smPop(myStack); + smPop(myStack); + smPush(myStack,result); + return 1; + } } int smMult(struct stackm* myStack){ - + if(smSize(myStack) <= 2){ + return 0; + } else { + int sum = (myStack->top->value) * (myStack->top->next->value); + smPush(myStack,sum); + return 1; + } } int smRotate(struct stackm* myStack, int depth){ - + if(depth == 0){ + return 0; + } else { + node *temp = myStack->top; + int count = 1; + while (count < depth && temp != NULL) { + temp = temp->next; + count++; + } + if (temp == NULL) { + return 0; + } + node *nNode = temp; + while (temp->next != NULL) { + temp = temp->next; + } + temp->next = myStack->top; + myStack->top = nNode->next; + nNode->next = NULL; + return 1; + } } #endif \ No newline at end of file diff --git a/02-TeenyTinyShell/ttsh b/02-TeenyTinyShell/ttsh new file mode 100644 index 0000000000000000000000000000000000000000..b8bdfd96b4f4e1e5ad8c020b63dfbf14f3ab4a77 GIT binary patch literal 20384 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 literal 0 HcmV?d00001 diff --git a/02-TeenyTinyShell/ttsh.c b/02-TeenyTinyShell/ttsh.c index 9d61ed4..88992a2 100644 --- a/02-TeenyTinyShell/ttsh.c +++ b/02-TeenyTinyShell/ttsh.c @@ -10,6 +10,7 @@ #include #include +#include #define INPUT_MAX 256 #define CMD_MAX 5 @@ -71,6 +72,8 @@ int main() char user_input[INPUT_MAX]; char cmd_strs[CMD_MAX][INPUT_MAX]; + int quit_flag = 0; + // TODO need to be able to get input from // the user in a loop @@ -84,6 +87,11 @@ int main() } // TODO: Figure out how to handle the 'quit' command + if (strcmp(user_input, "quit") == 0){ + printf("Quitting..."); + exit(0); + } + // Chop the input into command strings int cmd_count = parse_commands(user_input, cmd_strs); @@ -101,6 +109,7 @@ int main() // NOTE: the command name is always the first argument // 2) fork a process // 3) execute the command with execvp + } return 0; diff --git a/02-TeenyTinyShell/ttsh.o b/02-TeenyTinyShell/ttsh.o new file mode 100644 index 0000000000000000000000000000000000000000..1aab76aef04e54a6085a57e22513915608977b6f GIT binary patch literal 8704 zcmbtZdu$xV8K3oe?X%CX_?*N}T6C1W5Zs-eIKg&e$BAS6ObiLcX%h;p&v$#itMB%X zeK+xBt+EIKnzu$bX`DS)@X7f;Ye@~I35K$D;LFSQQ2|4nm`F1C5c9IojIr*gey3h7U zCND-NW&@GQ!!wbo<=7jU>YjNW4Mir;&QRj$X=i<8N~P_|H%_gB#_Q-Pa;zOWDs*xV z%B2oe7J8H2*QUC!MUF>~?VY2%@^1AjWLvr8m+3bNIf<6uKC>vMN$0}Z?km_yO&r@y zn7d zME4aX!o2+oU9wDozsSVltHhZCJFaNIH5(`)Bp#V6Ub_K=BOupwnx}`3jHw?xdijgF zIgy`;!T{KPNucg`uL zelM*%dvpdccqf-iCum!lqSaO^{=g+_IWl$I)p%r61s$BN(!soaX1@^~O6vhT8!+`~ zJm6Tm8Aus9$1W#Z$v`$6$V83tKrEYqI&PJdH5~zRpOdo59q?nPjNwoyM0RC$D_|#6 zRv>4l40}7-P)rE?gW{!&xq`M`Kb=MMfHsTHt!xF#<1NJwPcf~Ey&lC&aS@{xm>}pa zqRUt2vlP(-bGjyI%1fVH1mjqMWeG^#MoQfyO;?-w_D*MM9Z5Ttlhsg5-RTgs-O z?PcH=3ThZ=p`f0DRtf?Pv{A5ufvprYGO&$;76#fW=wzUif(QdUDA>!uP6`e%uxmv- z#5u@7PhA&)Bm)r|b&i2P3Ty^$^;s~4F$Qj{-3#Cd1GiUy4Zyb<*yHU3YZDCIQGF1= zBMcm@dB0G?yu9vaRM8MwEs7j#}`Kr0UdILW{ujqNl8LtY0A z{Dw`ETH5eEkSm8jQhZaD59<!xs)SB9V;-dpYfsI$OIKCkBB(eA;%~xVH7R|SY90r+^c`qYmD1I#u$QkozFuq4 zmC~cqRfKIQU$BZO&%`{0EJLJ3%CYU4zHpe~zH*CUi{X3A(1K_B&lYZfv|P_?e~Ku2 z73+Qse7(ewch8?mcsdM^uW zGYzX~I?mu09}`YOT5&upsFV5yP9D!YVHWFGaR>giZV=@w+#)=o$}(kbmEY&7T3xkF zsV%Kp3656~PgR?5tFP79=ZAc(AwFLRNWdDYh9)5@XW&sTK?bEt*Ac9|e#KMe^D%7& zh_XtTu@+D+pSKQ6$q&8T8X%vF(&tC{%Im>S804y&U5eWqP^cPbqb8(mZaDWMm$T#*blF_K;bCit>3?CH&GO2(U`nvCMEfH549>#lmAPTeL0B!F0-S#)89! z6K)Nsj9A)<>x9a2uvl&=Wn2G+NZ20F=?eu3v280Eieadh9gpjYP!eD3R1%snBFi?N zn635n^>+gS3vj*#8mTOh@ba<7EloGgbjq@s8c`KemQRSMUQx@gs9vwFmffY+crU8e zV`|wcwXz+!kXqTVuKcH3v0YUTddfp;nYTk-?x;TRuv*cmRwmUtP-qwhew$kBZCCxf zRiEdO_g1ySQ(>!0d((%iIt#taRquyt&0T8Q3t;ttTDIHkSJmg#<=#5L@2NH4RjbBS z^;vZ-DJu4aR23@41|#L?Ay{Z1Ecp;#eTt%K*+fFKiPpDA!xy!dvrVGKlF^hwtknHF zc3H`+X%9IGDg?DQ6t#4c&Kko3`r{Z@YS_@@@P4;RE^1o3Cf@5{DjU~hqqa*NrMLq4 zF-bUM*x^`sKb#P(@PMh0X3g-fY|P2%hHZs=Q}&&DE^CFm_HAluZVESU3=ZhJF+Pwo z#`h)lbed?16g>Lb`61{=oVi0!S|S}Cw(_B4pB8gWh%4=649bfTwQM?$>9BNA6E)-| z6E#P46Bi96Wx-&zgsJPMZfTgE#ks(w9x_w5PP2;Z#(;%GXg&iA4S}Q;9o1QCW0^R_ z=V0{dY;1&&VI$EpkW7pt>)53C_WgmbrdtB7q2^FyAegZoLvJ6}!9ywrFlxqrX07a(|7`g-H8_ZB8HZ7|D8k`t5H^0lzJb7Z4Iw= z;%Z0VncY=24;OV+mK05a1nb+zOc46w&i9|l_utL?>4_uX|1a9lyB1a88aBy~>8(NT z^c1{-;#kCJ7HW8KyDd;WG#iUMJcJ(O7j<}~x0ev`5PEVHFkgGvK`@U+!$T@Xb3yHa zGhLzLA@uyVsLR7nZ3TFG5?sLJd$-n=H*x-fH+Mnn*Db*}FTuAh!S7gtk1WCO0UqNN z@rlFWy-UdBfwNF{GThEiTu4yFY1f2yA^Gto_#;d3N0;Em=|JAW*sibj_V3xbqhH(8 z)3dL8KpWVxv%gy-iD4a1BYaCp(CrP7i3d^XH3+Po9l=f`mK!H@SD;tg1ah%Vj_6}> z_tjwEgk1&Rzav^An!;-)oc(CQ^97Fo8h%QFvWC(03BfbH;2SxQ@~A8LT`nH?62bRz z9-p*27cZWD%2yJtBiGQDCTjDt+Ma|_FIX6hvPp;yvkq6f01~d^Rp6v56|1D5})L8mhgTtF8qpv#V_$Q zj3xnz{|?7NiNA%%(9@i%b!pGf@oIetyz>p6Z~;s?2%^Af+G=jQ{7@8$euiSOX}-x43-^5uLSVt(;U z0G5>!zn;slmG}=hZj$&T9JflmSRaED4@VGMMkF4;tzmgs;&0;e$0hz}od1EuH}d#j zmiQ4a|DMD@#qmXnPqA>wti-o*{$q(Bgj06*2ioTq8HuJkY$mOnPq_X#`Pg*7;d+TEXdGybZ7{^sel+NbIObw z!|-{`&B3QQU8sOR62eb7@CAm14EQJzf~zNd6o9iS$MDTA1fL6Xx@nJdJ9-js!O@J) z2ljtf0no=ByXOQ=cH$3|PIr<4qpZ8&*$bz<(@jGAEq-9haeX`^qpo;A;@J|*I`~7L zFDImEIU@NLyzC#(m1y&S)o%h_v?;q2{=W)+?jrl|fKHi1`SaZ1&HQ-~He}gW=qQxG zmO7?!nNJMn51VrSZUs)ZiJI&`+z8nvbxM%jvxI&RcO=f+XcLR9e*m~b@o&I|0Y&Iz z{CM7!XaZ!gKQ!H2e^N+&d@*npTHvjhk-+zB2H-1vK}`uD7Lh) zgnv;#0y2g4pXQ%1aDBRq&=d7Ebc(iH?rh;tAd6(52PM2e$m{nlt{-q4g|^7Qpnm}k z^e^kraQ!hM$ZJ{u=fD@re~#xr!u2r!xFraEF)xLDqsk!vMDs2W3?B!)7s~p$rlctX e2Ido;L3xr@`CmELC{{@SB#-}0UXwLs{r> +#include +#include +#include +#include +#include + +int main() { + int A[MAX][MAX], B[MAX][MAX], C[MAX][MAX]; + int i, j, k, sum = 0; + int shmid; + int *shm; + + // Allocate shared memory + shmid = shmget(IPC_PRIVATE, MAX * MAX * sizeof(int), 0666 | IPC_CREAT); + if (shmid < 0) { + perror("shmget"); + exit(1); + } + + // Attach shared memory + shm = shmat(shmid, NULL, 0); + if (shm == (int *)-1) { + perror("shmat"); + exit(1); + } + + // Initialize matrices A and B + for (i = 0; i < MAX; i++) { + for (j = 0; j < MAX; j++) { + A[i][j] = i + j; + B[i][j] = i - j; + } + } + + // Fork a child process + pid_t pid = fork(); + + if (pid == -1) { + perror("fork"); + exit(1); + } + else if (pid == 0) { // Child process + for (i = 0; i < MAX; i++) { + for (j = 0; j < MAX; j++) { + sum = 0; + for (k = 0; k < MAX; k++) { + sum += A[i][k] * B[k][j]; + } + *(shm + i * MAX + j) = sum; + } + } + exit(0); + } + else { // Parent process + wait(NULL); + + // Retrieve result from shared memory + for (i = 0; i < MAX; i++) { + for (j = 0; j < MAX; j++) { + C[i][j] = *(shm + i * MAX + j); + } + } + + // Print result matrix C + printf("Matrix C:\n"); + for (i = 0; i < MAX; i++) { + for (j = 0; j < MAX; j++) { + printf("%d ", C[i][j]); + } + printf("\n"); + } + + // Detach and remove shared memory + shmdt(shm); + shmctl(shmid, IPC_RMID, NULL); + munmap(shm); + } + + return 0; +} \ No newline at end of file diff --git a/03-MatrixAddition (fork)/matRead.c b/03-MatrixAddition (fork)/matRead.c new file mode 100644 index 0000000..f643d39 --- /dev/null +++ b/03-MatrixAddition (fork)/matRead.c @@ -0,0 +1,16 @@ +#include + +int main(int argc, char* argv[]) +{ + int rows, columns; + FILE* input = fopen(argv[1], "r"); + fscanf(input, "%d", &rows); + fscanf(input, "%d", &columns); + for(int i = 0; i < rows; i++) { + for(int j = 0; j < columns; j++) { + int value; + fscanf(input, "%d", &value); + } + } + fclose(input); +} diff --git a/CS3841.code-workspace b/CS3841.code-workspace new file mode 100644 index 0000000..813e2f5 --- /dev/null +++ b/CS3841.code-workspace @@ -0,0 +1,12 @@ +{ + "folders": [ + { + "uri": "vscode-remote://wsl+ubuntu/mnt/c/Users/Trevor/Documents/GitRepos/CS3841" + } + ], + "settings": { + "files.associations": { + "stdio.h": "c" + } + } +} \ No newline at end of file