X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2F16_head.c;h=c5a5d3cf07a20d84599420ca0c9760c1b2e08c19;hb=2d5a0b2cbf01a773c15a9331cabd697646bc27f6;hp=df0b31c7bdc7c1a061eb1736799dba9ae578bf43;hpb=3b3f3b4bc62245426ea4dec22cbfaa7cfbf13645;p=16.git diff --git a/src/lib/16_head.c b/src/lib/16_head.c old mode 100644 new mode 100755 index df0b31c7..c5a5d3cf --- a/src/lib/16_head.c +++ b/src/lib/16_head.c @@ -1,44 +1,37 @@ -/* Project 16 Source Code~ - * Copyright (C) 2012-2015 sparky4 & pngwen & andrius4669 - * - * This file is part of Project 16. - * - * Project 16 is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * Project 16 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see , or - * write to the Free Software Foundation, Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301 USA. - * - */ - -#include "src/lib/16_head.h" - -/* Function: Wait ********************************************************** -* -* Parameters: wait - time in microseconds -* -* Description: pauses for a specified number of microseconds. -* -*/ -void wait(clock_t wait){ - clock_t goal; - - if(!wait) return; - - goal = wait + clock(); - while((goal > clock()) && !kbhit()) ; -} /* End of wait */ - -long int +/* Project 16 Source Code~ + * Copyright (C) 2012-2018 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover + * + * This file is part of Project 16. + * + * Project 16 is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * Project 16 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see , or + * write to the Free Software Foundation, Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301 USA. + * + */ + +#include "src/lib/16_head.h" + +//cpu reg stuff for _AX, _BX, _CX, _DX +#ifdef __WATCOMC__ +union regs CPURegs; +#endif + +// big global status text buffer +char global_temp_status_text[512]; +char global_temp_status_text2[512]; + +long int filesize(FILE *fp) { long int save_pos, size_of_file; @@ -48,63 +41,92 @@ filesize(FILE *fp) size_of_file = ftell(fp); fseek(fp, save_pos, SEEK_SET); return(size_of_file); -} - -void printmeminfoline(byte *strc, const byte *pee, size_t h_total, size_t h_used, size_t h_free) -{ - byte str[64]; - strcat(strc,pee); strcat(strc," "); ultoa((dword)h_total,str,10); strcat(strc,str); strcat(strc," "); ultoa((dword)h_used,str,10); strcat(strc,str); strcat(strc," "); ultoa((dword)h_free,str,10); strcat(strc,str); - strcat(strc,"\n"); -} - -void print_normal_entry(char *text, dword total, dword used, dword free, byte *str) -{ - printf("%-17s", text); - convert("%8sB ", total); - convert("%9sB ", used); - convert("%9sB\n", free); -} - -/* - * As for printf(), but format may only contain a single format specifier, - * which must be "%s" and is replaced with the string form of num with commas - * separating groups of three digits. - * - * e.g. convert("%s bytes", 1234567) -> "1,234,567 bytes" - */ -void convert(const char *format, dword num) -{ - int c, i, j, n; - char des[4*sizeof(dword)+3]; - union REGS regs; - struct SREGS sregs; - char mycountry[48]; /* probably 34 bytes are enough... */ - char ksep = ','; /* or . */ - - regs.x.ax = 0x3800; - sregs.ds = FP_SEG(&mycountry); - regs.x.dx = FP_OFF(&mycountry); - intdosx(®s,®s,&sregs); - if (regs.x.cflag == 0) { - ksep = mycountry[7]; /* 1000's separator */ - /* dsep = mycountry[9]; ** decimal separator */ - } - - n = sprintf(des, "%lu", num); - /* insert commas in the string */ - c = 3; - for (i = n - 3; i > 0; i--) { - if (c%3==0) { - for (j = n; j >= i; j--) - des[j+1] = des[j]; - des[i]=ksep; /* ',' */ - n++; - } - c++; - } - printf(format, des); -} - +} + +// clrstdin() clear any leftover chars tha may be in stdin stream // +void clrstdin() +{ + int ch = 0; + while( ( ch = getchar() ) != '\n' && ch != EOF ); +} + +//from http://stackoverflow.com/questions/2736753/how-to-remove-extension-from-file-name +// remove_ext: removes the "extension" from a file spec. +// mystr is the string to process. +// dot is the extension separator. +// sep is the path separator (0 means to ignore). +// Returns an allocated string identical to the original but +// with the extension removed. It must be freed when you're +// finished with it. +// If you pass in NULL or the new string can't be allocated, +// it returns NULL. + +char *remove_ext (char* mystr, char dot, char sep) { + char *retstr, *lastdot, *lastsep; + + // Error checks and allocate string. + if (mystr == NULL) + return NULL; + if ((retstr = malloc(strlen (mystr) + 1)) == NULL) + return NULL; + + // Make a copy and find the relevant characters. + + strcpy (retstr, mystr); + lastdot = strrchr (retstr, dot); + lastsep = (sep == 0) ? NULL : strrchr (retstr, sep); + + // If it has an extension separator. + + if (lastdot != NULL) { + // and it's before the extenstion separator. + + if (lastsep != NULL) { + if (lastsep < lastdot) { + // then remove it. + + *lastdot = '\0'; + } + } else { + // Has extension separator with no path separator. + + *lastdot = '\0'; + } + } + + // Return the modified string. + free(mystr); + return retstr; +} + + +//from http://quiz.geeksforgeeks.org/c-program-cyclically-rotate-array-one/ +void rotateR(byte *arr, byte n) +{ + byte x = arr[n-1], i; + for (i = n-1; i > 0; i--) + arr[i] = arr[i-1]; + arr[0] = x; +} + +void rotateL(byte *arr, byte n) +{ + byte x = arr[n+1], i; + for (i = n+1; i > 0; i++) + arr[i] = arr[i+1]; + arr[0] = x; +} + +void printmeminfoline(byte *strc, const byte *pee, size_t h_total, size_t h_used, size_t h_free) +{ + byte str[64]; + strcat(strc,pee); strcat(strc," "); ultoa((dword)h_total,str,10); strcat(strc,str); + if(strlen(str)<=4) strcat(strc," "); //printf("%u\n", strlen(str)); + strcat(strc," "); ultoa((dword)h_used,str,10); strcat(strc,str); strcat(strc," "); strcat(strc," "); + ultoa((dword)h_free,str,10); strcat(strc,str); + strcat(strc,"\n"); +} + /////////////////////////////////////////////////////////////////////////// // // US_CheckParm() - checks to see if a string matches one of a set of @@ -138,67 +160,179 @@ US_CheckParm(char *parm,char **strings) } } return(-1); -} - -/* -========================== -= -= Quit -= -========================== -*/ - -/*void Quit(char *error, ...) -{ - short exit_code=0; - unsigned finscreen; - - va_list ap; +} - va_start(ap,error); +// for input test // +byte dirchar(byte in) +{ + byte out; + switch(in) + { + case 0: //up + out = 0x1E; + break; + case 4: //down + out = 0x1F; + break; + case 1: //left + out = 0x11; + break; + case 3: //right + out = 0x10; + break; + default: //null + out = 0xB3; + break; + } + return out; +} -#ifndef CATALOG - if (!error) +//from: http://stackoverflow.com/questions/5349896/print-a-struct-in-c +void print_mem(void const *vp, size_t n) +{ + size_t i; + unsigned char const *p = vp; + for (i=0; i>8), BYTE_TO_BINARY(_cflag)); +#else +// printf(" ip=%04x\n\n", _IP); +// printf(" cf=%04x\npf=%04x\naf=%04x\nzf=%04x\nsf=%04x\ntf=%04x\nif=%04x\ndf=%04x\nof=%04x\n", _CF, _PF, _AF, _ZF, _SF, _TF, _IF, _DF, _OF); + printf("cflag: %016x\n",(_cflag)); +#endif + printf("testing\n"); +// printf("dx: "NIBBLE_TO_BINARY_PATTERN""NIBBLE_TO_BINARY_PATTERN"\n", NIBBLE_TO_BINARY(_dx>>4), NIBBLE_TO_BINARY(_dx)); +// printf("dx: "BYTE_TO_BINARY_PATTERN""BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(_dx>>8), BYTE_TO_BINARY(_dx)); + printf("dx: "WORD_TO_BINARY_PATTERN"\n", WORD_TO_BINARY(_dx)); + printf(" ---------------------------------------\n"); #endif - exit(exit_code); -}*/ + printf("for more info see\n http://stackoverflow.com/questions/9130349/how-many-registers-are-there-in-8086-8088\n"); + printf("================================================================================"); +}