X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2F16_head.c;h=b015902ad898188731bcf9ef2ee3b70c622dd553;hb=6021fc3f27b895d382fbd30488ead35657e39196;hp=008c654409f12919eda0533725d4113c3745afc8;hpb=364d4b084428eeee1b6c510ff65241d3b92ccc5a;p=16.git diff --git a/src/lib/16_head.c b/src/lib/16_head.c old mode 100644 new mode 100755 index 008c6544..b015902a --- a/src/lib/16_head.c +++ b/src/lib/16_head.c @@ -1,180 +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; +/* 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. + * + */ - if(!wait) return; +#include "src/lib/16_head.h" - goal = wait + clock(); - while((goal > clock()) && !kbhit()) ; -} /* End of wait */ - -void* AllocateLargestFreeBlock(size_t* Size) -{ - size_t s0, s1; - void* p; - - s0 = ~(size_t)0 ^ (~(size_t)0 >> 1); - - while (s0 && (p = malloc(s0)) == NULL) - s0 >>= 1; - - if (p) - free(p); - - s1 = s0 >> 1; - - while (s1) - { - if ((p = malloc(s0 + s1)) != NULL) - { - s0 += s1; - free(p); - } - s1 >>= 1; - } - - while (s0 && (p = malloc(s0)) == NULL) - s0 ^= s0 & -s0; - - *Size = s0; - return p; -} - -size_t GetFreeSize(void) -{ - size_t total = 0; - void* pFirst = NULL; - void* pLast = NULL; - - for (;;) - { - size_t largest; - void* p = AllocateLargestFreeBlock(&largest); - - if (largest < sizeof(void*)) - { - if (p != NULL) - free(p); - break; - } - - *(void**)p = NULL; - - total += largest; - - if (pFirst == NULL) - pFirst = p; - - if (pLast != NULL) - *(void**)pLast = p; - - pLast = p; - } - - while (pFirst != NULL) - { - void* p = *(void**)pFirst; - free(pFirst); - pFirst = p; - } - - return total; -} - -void far* AllocateLargestFarFreeBlock(size_t far* Size) -{ - size_t s0, s1; - void far* p; - - s0 = ~(size_t)0 ^ (~(size_t)0 >> 1); - while (s0 && (p = _fmalloc(s0)) == NULL) - s0 >>= 1; - - if (p) - _ffree(p); - - s1 = s0 >> 1; - while (s1) - { - if ((p = _fmalloc(s0 + s1)) != NULL) - { - s0 += s1; - _ffree(p); - } - s1 >>= 1; - } - while (s0 && (p = _fmalloc(s0)) == NULL) - s0 ^= s0 & -s0; - - *Size = s0; - return p; -} - -size_t GetFarFreeSize(void) -{ - size_t total = 0; - void far* pFirst = NULL; - void far* pLast = NULL; - for(;;) - { - size_t largest; - void far* p = AllocateLargestFarFreeBlock(&largest); - if (largest < sizeof(void far*)) - { - if (p != NULL) - _ffree(p); - break; - } - *(void far* far*)p = NULL; - total += largest; - if (pFirst == NULL) - pFirst = p; - - if (pLast != NULL) - *(void far* far*)pLast = p; - pLast = p; - } - - while (pFirst != NULL) - { - void far* p = *(void far* far*)pFirst; - _ffree(pFirst); - pFirst = p; - } - return total; -} - -long int +//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; @@ -184,8 +41,92 @@ filesize(FILE *fp) size_of_file = ftell(fp); fseek(fp, save_pos, SEEK_SET); return(size_of_file); -} - +} + +// 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 @@ -219,67 +160,58 @@ US_CheckParm(char *parm,char **strings) } } return(-1); -} - -/* -========================== -= -= Quit -= -========================== -*/ +} -/*void Quit(char *error, ...) +// for input test // +byte dirchar(byte in) { - short exit_code=0; - unsigned finscreen; - - va_list ap; - - va_start(ap,error); - -#ifndef CATALOG - if (!error) + byte out; + switch(in) { - CA_SetAllPurge (); - CA_CacheGrChunk (PIRACY); - finscreen = (unsigned)grsegs[PIRACY]; + 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; } -#endif + return out; +} - //ShutdownId (); - - if (error && *error) - { - vprintf(error,ap); - exit_code = 1; - } -#ifndef CATALOG - else - if (!NoWait) +//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